使用“;”;在.NET正则表达式中
本文关键字:正则表达式 NET 使用 | 更新日期: 2023-09-27 17:58:11
有人能解释为什么结果1,2和3是假的吗?看起来是个小问题。。但是,我还是被卡住了:/
string input = "foo abc defg bar";
string pattern = "abc defg";
string pattern1 = "'b" + Regex.Escape(pattern) + "'b";
string pattern2 = "'b" + pattern + "'b";
string pattern3 = "'babc defg'b";
string pattern4 = pattern;
bool result1 = Regex.IsMatch(input, pattern1); // FALSE
bool result2 = Regex.IsMatch(input, pattern2); // FALSE
bool result3 = Regex.IsMatch(input, pattern3); // FALSE
bool result4 = Regex.IsMatch(input, pattern4); // TRUE
当然。您的'b
实际上是退格字符,而不是正则表达式'b
。您需要使用"''b"
将其嵌入C#字符串文字中,或者使用逐字逐句的字符串文字:@"'b"
。
记住:反斜杠是C#字符串的转义符,就像它是正则表达式的转义符一样,所以如果你不小心,你需要转义两次,一次用于字符串文字,一次为正则表达式。
另一件事:远离'b
,与'w
一样。'b
是根据'w
定义的锚点,而'w
是一个字符类,除了快速一次性任务之外,它对任何事情都毫无用处,在这些任务中,您可以非常严格地控制想要匹配的所有内容。'b
简单地意味着锚的一侧是与'w
匹配的字符,而另一侧没有(字符串的末端或与'W
匹配的字符)。现在,'w
包括数字和_
。如果你搜索模糊的类似单词的东西,至少我倾向于不认为数字和下划线是单词的一部分。通常,我喜欢明确它实际上是我想要的东西,例如通过环视断言:(?<!'p{L})
是一种指定在匹配的当前点之前没有字母的方式,它实际上是模式开始时'b
的替代品。类似地,CCD_ 17可以用于图案末尾的CCD_ 18。当你这样写它们时,你可以更好地控制你认为适合你要找的东西的"边界",例如,也许你只想在foo
被空白包围时找到它:(?<![^'S])foo(?![^'S])
(注意这里的双负,因为先行和后向只能是负的,所以它们也在字符串的开头和结尾工作)。