我用
(?<!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()函数
这并不完美(这就是 HTML 解析器的用途),但它适用于绝大多数 HTML 文件:
(^|>)[^<>]*##[^#]*##[^<>]*(<|$)
Run Code Online (Sandbox Code Playgroud)
这个想法很简单。您正在寻找标签之外的字符串。要位于标签之外,最前面的尖括号必须是闭括号(或者根本没有括号),而后面最接近的尖括号必须是开括号(或没有)。这假设属性值中未使用尖括号。
如果您确实关心属性名称是“value”,那么您可以匹配:
value\s*=\s*"([^\"]|\\\")*##[^#]*##([^\"]|\\\")*\"
Run Code Online (Sandbox Code Playgroud)
...然后简单地否定匹配 ( !preg_match(...)
)。