[英]Why does this regex with no special character match a longer string?
我在使用此方法嘗試查找匹配項,例如:
Regex.Match("A2-TS-OIL", "TS-OIL", RegexOptions.IgnoreCase).Success;
我得到了一個真實的結果。 我很困惑。 我認為這應該返回false,因為模式中沒有特殊字符。 如果我使用".+TS-OIL"
,則應返回true( .
對於任何和+
對於多於1)。 我該怎么辦才能得到我需要的東西?
正則表達式匹配不必從輸入的開始開始。 你可能想要:
^TS-OIL
如果你只想在開始時匹配。 要么:
^TS-OIL$
防止它與TS-OIL-123匹配。
^
匹配輸入的開頭,$匹配結束。
我相信有一些地方可以自動添加^
和$
(比如web驗證控件),但它們是例外。
順便說一下,你可以用:
Regex.IsMatch(...)
在這種情況下,以節省一些擊鍵。
如果您只想在測試字符串以正則表達式開頭時匹配,那么您需要指示:
Regex.Match("A2-TS-OIL", "^TS-OIL", RegexOptions.IgnoreCase).Success;
^
表示匹配必須從字符串的開頭開始。
在表達式字符串的開頭和結尾有一個隱含的。*。 您需要使用^和$來表示字符串的開頭和結尾以覆蓋它。
TS-OIL是A2-TS-OIL中的子串。 所以,它會產生一個匹配。 你有最簡單的匹配 - 文字子串。 如果你想要TS-OIL不匹配,你也可以嘗試(?!^ A2 - )(TS-OIL),假設你不希望它以A2-開頭,但可能還需要其他東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.