簡體   English   中英

非常簡單的正則表達式不起作用

[英]Very simple regex not working

我已經讀過要使用正則表達式(在.NET中)匹配字符串中的單詞,可以在正則表達式中使用單詞邊界說明符( \\b )。 但是,這些調用都不會導致任何匹配

Regex.Match("INSERT INTO TEST(Col1,Col2) VALUES(@p1,@p2)", @"\b@p1\b");

Regex.Match("INSERT INTO TEST(Col1,Col2) VALUES(@p1,@p2)", @"\bINSERT\b");

我做錯了什么嗎?

編輯:第二個已經在工作;)

更新另一個答案指出, @不是單詞字符,因此@和空格之間沒有單詞邊界。 作為一種解決方法,您可以改用否定式

@"(?<!\w)@p1\b"

原始答案 :您需要在正則表達式前添加@

@"\b@p1\b"

否則,字符串“ \\ b”將被解釋為退格鍵(字符8),而不是正則表達式字邊界。 在MSDN上有有關@引號字符串文字的更多信息。

不使用@引號的字符串文字的另一種方法是轉義反斜杠:

"\\b@p1\\b"

第二種情況通過@"\\bINSERT\\b"解決,如另一個答案中所述。

但是/b在以下位置匹配:

  • 如果字符串中的第一個字符是單詞字符,則在字符串中第一個字符之前。
  • 如果字符串中的最后一個字符是單詞字符,則在字符串的最后一個字符之后。
  • 字符串中的兩個字符之間,其中一個是單詞字符,另一個不是單詞字符。

單詞字符是[a-zA-Z0-9_]的一個,因此第一種情況無法通過在@前面加上前綴以轉義\\b字符來解決,因為您正試圖匹配一個非單詞字符( @ )。


更新:第一種情況可以通過否定的后向聲明來解決,也可以通過使用否定的詞邊界\\B來解決,從而使語法更加簡潔( @"\\B@p1\\b" )。

\\將在字符串中轉義-您需要使用字符串文字來避免這種情況:

@"\bINSERT\b"

否則,正則表達式會看到"bINSERTb"

暫無
暫無

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

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