正则表达式匹配字符串的一部分,当比赛不包含特定字符串 - PCRE的grep
-
25-09-2019 - |
题
我使用的grep的TextWrangler进行查找/多个文件替换,并运行与最后找一面墙/替换我需要执行。我需要">
和<br />
的第一个实例之间的任何文本行匹配,但在比赛中不能包含字符序列[XCOL。正则表达式风味Perl兼容(PCRE),以便回顾后需要是固定长度的。
实施例要搜索的文本:
<p class="x03">FooBar<br />Bar</p>
<p class="x03">FooBar [xcol]<br />Bar</p>
<p class="x06">Hello World<br />[xcol]foo[xcol]bar<br /></p>
<p class="x07">Hello World[xcol]<br />[xcol]foo[xcol]bar<br /></p>
正则表达式的期望的行为:结果
第一线的匹配强> ">
FooBar<br />
结果
第二行的不匹配强>结果
第三行的匹配强> ">
Hello World<br />
结果
第四行的不匹配强>
">
和<br />
之间的文本将被一个组中捕获与所述替换功能中使用。最接近我使用具有负先行以下正则表达式,但根据需要,这将不是第三线匹配:
">((?!.*?\[xcol]).*?)<br />
任何帮助或建议表示赞赏。谢谢。
解决方案
尝试此正则表达式:
">((?!\[xcol]).)*<br\s*/>
一个(短)说明:
"> # match '">'
( # start group 1
(?!\[xcol]). # if '[xcol]' can't be seen ahead, match any character (except line breaks)
) # end group 1
* # repeat group 1 zero or more times
<br\s*/> # match '<br />'
如果您需要匹配换行符为.
还有,可以启用DOT-ALL(在(?s)
前添加.
)或类似.
更换[\s\S]
不隶属于 StackOverflow