[英]Regex and the colon (:)
我有以下代碼。 這個想法是檢測整個單詞。
bool contains = Regex.IsMatch("Hello1 Hello2", @"\bHello\b"); // yields false
bool contains = Regex.IsMatch("Hello Hello2", @"\bHello\b"); // yields true
bool contains = Regex.IsMatch("Hello: Hello2", @"\bHello\b"); **// yields true, but should yield false**
似乎正則表達式忽略了冒號。 如何修改代碼以使最后一行返回 false?
\\b
表示“單詞邊界”。 :
不是任何單詞的一部分,因此該表達式為true。
也許您想要一個這樣的表達式:
(^|\s)Hello(\s|$)
這意味着: 字符串“ Hello”,其后是表達式的開頭或空白,然后是表達式的結尾或空白。
正則表達式並沒有忽略冒號。 冒號之前的位置是\\b
匹配的位置,因為\\b
匹配單詞邊界。 這意味着單詞字符和非單詞字符之間的位置。
如果要讓Whitespace在單詞'Hello'之后跟隨,請使用"\\bHello\\s"
。
要匹配不直接跟有冒號的整個單詞,請使用
\bHello\b(?!:)
\bHello(?![:\w])
請參閱正則表達式演示。 詳情:
\\b
- 單詞邊界Hello
——一句話(?![:\\w])
- 如果當前位置右側有:
或字符字符,則匹配失敗的負前瞻。請參閱C# 代碼演示:
bool contains = Regex.IsMatch("Hello: Hello2", @"\bHello\b");
Console.WriteLine(contains); // => False
Console.WriteLine(Regex.IsMatch("Hello: Hello2", @"\bHello(?![:\w])"));
// => False
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.