簡體   English   中英

2個字符串之間的文本的正則表達式模式

[英]Regex pattern for text between 2 strings

我試圖在以下模式中提取所有文本(顯示為xxxx):

Session["xxxx"]

使用c#

這可能是Request.Querystring["xxxx"]所以我試圖動態構建表達式。 當我這樣做,我得到各種關於未轉義的字符或沒有匹配的問題:(

一個例子可能是:

string patternstart = "Session[";
string patternend = "]";
string regexexpr = @"\\" + patternstart + @"(.*?)\\" + patternend ;
string sText = "Text to be searched containing Session[\"xxxx\"] the result would be xxxx";

MatchCollection matches = Regex.Matches(sText, @regexexpr);

我可以幫助解決這個問題(因為我似乎總是使用RegEx :))

對代碼進行一些修改。

string patternstart = Regex.Escape("Session[");
string patternend = Regex.Escape("]");
string regexexpr = patternstart + @"(.*?)" + patternend;

字符[]與正則表達式具有特殊含義 - 它們定義了一個包含其中一個字符必須匹配的組。 要解決這個問題,只需使用前導\\字符“轉義”它們:

string patternstart = "Session\[";
string patternend = "\]";

例如,“最終字符串”可以是:

Session\["(.*)"\]

但是,如果需要,您可以輕松地編寫RegEx以自動處理Session,Querystring等(不會匹配您拋出的所有其他數組),並且避免必須首先構建字符串:

(Querystring|Session|Form)\["(.*)"\]

然后進行第二場比賽。

您在示例中構建的模式如下所示:

\\Session[(.*?)\\]

這有幾個問題。 首先,它假定字符串以字面反斜杠開頭,其次,它將整個(.*?)包裝在字符類中,這意味着它將匹配任何單個左括號,句點,星號,問號,右括號或反斜杠。 如果要匹配文字[ 。],則需要轉義模式中的括號。

你可以使用這樣的模式:

Session\[(.*?)]

例如:

string regexexpr = @"Session\[(.*?)]";
string sText = "Text to be searched containing Session[\"xxxx\"] the result would be xxxx";

MatchCollection matches = Regex.Matches(sText, @regexexpr);
Console.WriteLine(matches[0].Groups[1].Value); // "xxxx"

暫無
暫無

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

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