正则表达式公式不在HTML标记内

时间:2019-06-12 10:50:50

标签: .net regex

My regex pattern适用于HTML标记中未包含的所有文本:

((?<!-)\btest(?!-)\b)(?=[^<>]*(?:<\w|$))

在下面的示例中,我需要它在这两个字符串中找到'test'的两个实例:

vdsv ds test dsv sdlvk 
<b>dsjn vkjsd test sv</b>

1 个答案:

答案 0 :(得分:1)

在.NET中,您可以利用无限宽的外观:

\b(?<!-)test\b(?<!<[^<>]*)(?!-|[^<>]*>)

请参见.NET regex demo

在代码中:

var pattern = @"\b(?<!-)test\b(?<!<[^<>]*)(?!-|[^<>]*>)";

详细信息

  • \b-单词边界
  • (?<!-)-如果当前位置的左侧紧跟着-,则反向查找将使匹配失败
  • test-单词test
  • \b-单词边界
  • (?<!<[^<>]*)-如果存在<以及紧接在其左侧的<>以外的0个或多个字符,则失败的后向否定匹配失败当前位置
  • (?!-|[^<>]*>)-如果存在-<>以外的任何0+字符,后跟{{1} },紧接在当前位置的右侧。