正则表达式匹配c#而没有一些标签

时间:2017-12-15 18:53:55

标签: c# regex

我希望匹配精确和前缀通配符匹配,但有一个条件是它不应该被特定标记包围。

例如:如果要匹配的单词是test,则正则表达式应匹配 testtestingtestertesting.aspx但它不应与test</x>testing</x>tester</x>以及带前缀的其他字词匹配test

我想出了一个匹配test</x>的正则表达式。

string regex = string.Format("\\b{0}(\\S)*(?!</x>)", "test");

有人可以帮我纠正我的正则表达式吗?

1 个答案:

答案 0 :(得分:2)

\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>字符序列,则会导致匹配失败的否定前瞻