簡體   English   中英

正則表達式Match產生意外結果

[英]Regex.Match giving unexpected result

我一直在使用Regex.Match函數使用以下代碼來匹配兩個字符串

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

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

如果我搜索. 在任何字符串中,它都會給我true或者不highlightedText文本包含“。” 或不。

為什么給我虛假的價值?

正則表達式"." 是任何符號。 您的字符串中包含任何符號? 是。 使用@"\\." (轉義點)表示查找字符串包含點。

對於字符串中的簡單搜索子字符串,請使用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

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

您的searchText是實際的正則表達式,其中保留某些字符以供解釋。 這些通常稱為元字符,可以包括:

  • 反斜杠\\
  • 插入符^
  • 美元符號$
  • 句點或點.
  • 豎線或豎線符號|
  • 問號?
  • 星號或星號*
  • 加號+
  • 開頭括號(
  • 右括號)
  • 左方括號[
  • 開頭的花括號{

    如果要在搜索中將這些字符中的任何一個用作文字字符,則需要在其前面加上反斜杠來進行轉義,例如\\.

    就您而言, . 元字符用作表示任何單個字符的通配符。

基本上是regex語法,

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

因此您的searchText參數將被視為正則表達式模式,這就是為什么將true作為返回值的原因。

. ”匹配除換行符以外的任何單個字符

其他行為清單http://www.mikesdotnetting.com/article/46/c-regular-expressions-cheat-sheet

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

這將適合您的情況。

暫無
暫無

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

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