My regex pattern适用于HTML标记中未包含的所有文本:
((?<!-)\btest(?!-)\b)(?=[^<>]*(?:<\w|$))
在下面的示例中,我需要它在这两个字符串中找到'test'的两个实例:
vdsv ds test dsv sdlvk
<b>dsjn vkjsd test sv</b>
答案 0 :(得分:1)
在.NET中,您可以利用无限宽的外观:
\b(?<!-)test\b(?<!<[^<>]*)(?!-|[^<>]*>)
在代码中:
var pattern = @"\b(?<!-)test\b(?<!<[^<>]*)(?!-|[^<>]*>)";
详细信息
\b
-单词边界(?<!-)
-如果当前位置的左侧紧跟着-
,则反向查找将使匹配失败test
-单词test
\b
-单词边界(?<!<[^<>]*)
-如果存在<
以及紧接在其左侧的<
和>
以外的0个或多个字符,则失败的后向否定匹配失败当前位置(?!-|[^<>]*>)
-如果存在-
或<
和>
以外的任何0+字符,后跟{{1} },紧接在当前位置的右侧。