正则表达式后观问题

Ali*_*cuk 9 regex lookbehind

我用

(?<!value=\")##(.*)##
Run Code Online (Sandbox Code Playgroud)

匹配像## MyString ## 这样的字符串 ,它不是以下形式:

<input type="text" value="##MyString##">
Run Code Online (Sandbox Code Playgroud)

这适用于上述形式,但不适用于:(它仍匹配,不匹配)

<input type="text" value="Here is my ##MyString## coming..">
Run Code Online (Sandbox Code Playgroud)

我试过了:

(?<!value=\").*##(.*)##
Run Code Online (Sandbox Code Playgroud)

没有运气.任何建议都将深表感谢.

编辑:我正在使用PHP preg_match()函数

Max*_*keh 4

这并不完美(这就是 HTML 解析器的用途),但它适用于绝大多数 HTML 文件:

(^|>)[^<>]*##[^#]*##[^<>]*(<|$)
Run Code Online (Sandbox Code Playgroud)

这个想法很简单。您正在寻找标签之外的字符串。要位于标签之外,最前面的尖括号必须是闭括号(或者根本没有括号),而后面最接近的尖括号必须是开括号(或没有)。这假设属性值中未使用尖括号。

如果您确实关心属性名称是“value”,那么您可以匹配:

value\s*=\s*"([^\"]|\\\")*##[^#]*##([^\"]|\\\")*\"
Run Code Online (Sandbox Code Playgroud)

...然后简单地否定匹配 ( !preg_match(...))。