簡體   English   中英

Regex.Match、startat 和 ^(字符串開頭)

[英]Regex.Match, startat and ^ (start of string)

有人知道為什么這個代碼的output:

Regex re = new Regex("^bar", RegexOptions.Compiled);
string fooBarString = @"foo bar";

Match match1 = re.Match(fooBarString, 4);
Console.WriteLine(String.Format("Match 1 sucess: {0}", match1.Success));

Match match2 = re.Match(fooBarString.Substring(4));
Console.WriteLine(String.Format("Match 2 sucess: {0}", match2.Success));

是:

匹配 1 成功:錯誤

第 2 場比賽成功:真

?

預期的行為當然是“真”和“真”(否則我真的不知道“startat”參數應該有什么用處)。

這個想法是,這種正則表達式匹配(並且有很多)經常被調用(每秒幾個 tousand),我們發現 substring 操作正在扼殺 memory 的性能。

謝謝你的幫助!

根據 MSDN

如果要限制匹配,使其從字符串中的特定字符 position 開始,並且正則表達式引擎不掃描字符串的其余部分以進行匹配,請使用 \G 錨定正則表達式(在左側從左到右的模式,或在右邊的從右到左的模式)。 這限制了匹配,因此它必須准確地從 startat 開始。

正則表達式與整個字符串匹配,您需要使用 \G 而不是 ^

http://msdn.microsoft.com/en-us/library/3583dcyh.aspx

聽起來你是對的 - 你對^的含義感到困惑。 ^表示您正在使用的行的開頭。 ^bar將僅匹配以“bar”開頭的行,這是您用Substring人工完成的。 如果你解釋你想用它做什么,我們可能會幫助你。

順便說一句, Substring應該大多數正則表達式操作快得多。 如果這會扼殺你的表現,我會感到驚訝。

暫無
暫無

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

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