我有read使用正则表达式(在.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");
我有什么问题吗?
编辑:第二个已经在运行;)
答案 0 :(得分:10)
更新:正如another answer指出的那样,@
不是单词字符,因此@
和空格之间没有单词边界。作为解决方法,您可以使用negative lookbehind:
@"(?<!\w)@p1\b"
原始回答:您需要在正则表达式前面加@
:
@"\b@p1\b"
如果没有这个,字符串“\ b”将被解释为退格(字符8),而不是正则表达式字边界。有关MSDN上@-quoted string文字的更多信息。
不使用@ -quoted字符串文字的另一种方法是转义反斜杠:
"\\b@p1\\b"
答案 1 :(得分:4)
第二种情况由@"\bINSERT\b"
解决,如另一个答案中所述。
但是/b
匹配:
单词字符是[a-zA-Z0-9_]
之一,因此第一种情况无法通过为@
添加前缀来解除\b
字符,因为您尝试匹配非单词字符({ {1}})。
<强>更新强>
第一种情况可以通过负面的后置断言来解决,但也可以通过使用否定的单词边界@
来解决,这会产生更清晰的语法(\B
)。
答案 2 :(得分:1)