我想要精确匹配和前缀通配符匹配,但有一个条件,即它不应被特定标签包围。
例如:如果要匹配的单词是 test
,正则表达式应该匹配
test
, testing
, tester
, testing.aspx
但它不应该匹配 test</x>
和testing</x>
, tester</x>
以及其他带有前缀 test
的单词
我想出了一个匹配 test</x>
的正则表达式也。
string regex = string.Format("\\b{0}(\\S)*(?!</x>)", "test");
有人可以帮我纠正我的正则表达式吗?
最佳答案
\btest(\S)*(?!</x>)
模式匹配 test</x>
因为\btest
查找以 test
开头的单词,然后匹配并重复捕获任何0+非空白字符,然后检查是否没有 </x>
紧邻当前位置的右侧。自 (\S)*
匹配整体</x>
立即否定前瞻检查 </x>
当正则表达式索引已放置在此 </x>
之后时- 因此返回true,匹配成功。
你可以使用
string regex = string.Format(@"(?>\b{0}[^<\s]*)(?!</x>)", "test");
// or, beginning with C#6
// var regex = $@"(?>\b{SearchWord}[^<\s]*)(?!</x>)";
请参阅regex demo
现在,它将像这样匹配:
-
(?>\btest[^<\s]*)
- 原子组匹配-
\b
- 单词边界 -
test
- 搜索词 -
[^<\s]*
- 除<
之外的 0+ 个字符和空格
-
-
(?!</x>)
- 如果存在</x>
,则匹配失败的负前瞻紧邻当前位置右侧的字符序列
关于c# - 正则表达式匹配没有一些标签的c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47838308/