簡體   English   中英

為什么沒有特殊字符的正則表達式匹配更長的字符串?

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

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