[英]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.