簡體   English   中英

如何使用C#檢查文本文件中是否包含多行字符串?

[英]How to check whether a multi line string contains in a text file using c#?

我有一個包含一些HTML源代碼的文本文件。 我想檢查文本文件是否包含“給定腳本”。 舉個例子:

讓這是腳本...

_siteid = "bac29411-930d-43b2-8aab-0ec92fb7ab24";    
_subscriberId = "03aab4ac-8f05-42d6-b51b-55f7abcdc092";

function comCC24StartFunctioning(scriptSource) 
{     
    var scrDynamicHeadAttr = document.createElement('script');    
    scrDynamicHeadAttr.setAttribute('src', scriptSource);    
    scrDynamicHeadAttr.setAttribute('type', 'text/javascript');    
    scrHeadAttr = document.getElementsByTagName('head')[0];    
    scrHeadAttr.insertBefore(scrDynamicHeadAttr, scrHeadAttr.firstChild);    
}

我不會說這是正則表達式的工作,根據您“包含給定腳本”的含義,問題要么太簡單,要么太復雜。

如果您的意思是它包含用於字符匹配的逐字字符,則可以只使用String.IndexOf

如果腳本的格式可能不同,則可以刪除所有空白然后執行String.IndexOf。

但是,如果您的意思是腳本具有相同的行為,但是可能具有不同的結構,變量名等,那么您需要解析HTML和javascript並分析語法樹,這將變得非常復雜。

另一種選擇是只查找腳本的較小不變部分,例如再次使用String.IndexOf搜索“ comCC24StartFunctioning”。

如果我理解正確,那么您只想在整個文件中搜索確切的代碼段? 然后,以下應該工作:

string fileName = "your HTML file location";
string textToSearch = "your-script-snippet";
bool fileContainsScript = System.IO.File.ReadAllText(fileName).Contains(textToSearch);

最簡單的方法是使用String類的Contains()方法。 如果可能有一些多余的空格或換行符,則可以根據您的字符串構建一個正則表達式模式並尋找匹配項。 為此,您必須轉義正則表達式引擎認為“特殊”的所有字符,例如()[]。*等可能出現在腳本中的字符,並用\\ s *替換模式字符串中的白色字符。

string scriptToFind = ...
string fileToSearchText = ...

string patternToFind = Regex.Replace(@patternToFind, @"(\*|\.|\\|\(|\)|\[|\]|\{|\}|\+)",@"\$1"); // those aren't all special regex characters that need to be escaped
patternToFind = Regex.Replace(@scriptToFind, @"\s+",@"\s*");

bool isMatch = Regex.IsMatch(@fileToSearchText,@patternToFind);

出於測試目的: http : //gskinner.com/RegExr/

一種方法是從腳本和HTML源代碼中刪除換行符。 然后,您基本上有兩個字符串,並且需要查看一個字符串是否為另一個字符串的一部分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM