2015-05-07 170 views
0

我一直在使用Regex.Match功能用於匹配兩串下面的代碼Regex.Match給人意想不到的結果

bool contains = Regex.Match(highlightedText, searchText, RegexOptions.IgnoreCase).Success; 

下面這段代碼工作正常,但如果我設置highlightedText如說「拉傑夫」和searchText設置爲」。 「即點。它仍然返回我true

如果我在任何字符串中搜索.,它會給我true是不是highlightedText包含'。'或不。

爲什麼它給我虛假的價值?

+1

如果你想匹配文字'.'使用'[。]' – vks

回答

2

Regex "."是任何符號。你的字符串包含任何符號?是。 使用@"\."(逃逸點)查找字符串包含點。

對於字符串使用string.IndexOf簡單的搜索字符串是這樣的:

string text = "some kind of text"; 

Console.WriteLine("'{0}' contains '{1}'? {2}", text, "some", text.IndexOf("some", StringComparison.InvariantCultureIgnoreCase) >= 0); 
Console.WriteLine("'{0}' contains '{1}'? {2}", text, "pleasure", text.IndexOf("pleasure", StringComparison.InvariantCultureIgnoreCase) >= 0); 

結果:

'some kind of text' contains 'some'? True 
'some kind of text' contains 'pleasure'? False 
+0

是這種情況只有'。'或與任何其他字符 –

+0

@RajeevKumar格式問題。我已糾正它。 – xanatos

+0

是的,如果你不想使用正則表達式的行爲,使用'IndexOf'會簡單得多。 – Rawling

1

dot匹配每個單個字符。要匹配點本身,請使用"\."

1

searchText是實際的正則表達式,這對於解釋保留某些字符。這些通常被稱爲元字符並且可以包括:

  • 反斜槓\
  • 插入符^
  • 美元符號$
  • 句點或點.
  • 豎線或管道符號|
  • 問號?
  • 星號或星*
  • 加號+
  • 左括號(
  • 右括號)
  • 開口括號[
  • 開口大括號{

    如果你想使用任何這些爲文字字符的搜索,那麼你需要通過前面加上一個反斜線逃脫他們...如\.

    在你的情況下,.元字符作爲通配符代表任何單個字符。

1

基本正則表達式語法,

Regex.Match(STRING, PATTERN, RegexOptions.IgnoreCase) 

所以你searchText PARAM將被視爲正則表達式模式,這就是爲什麼你true作爲回報。

.」匹配任何單個字符除換行符

行爲 http://www.mikesdotnetting.com/article/46/c-regular-expressions-cheat-sheet

Regex.Match(highlightedText, @"\.", RegexOptions.IgnoreCase).Success 

這將是你的情況的其他工作表。

相關問題