我正在使用TextWrangler grep对多个文件执行查找/替换,并且遇到了我需要执行的最后一次查找/替换。我需要匹配">
和行中<br />
的第一个实例之间的任何文本,但匹配不能包含字符序列[xcol]。正则表达式的风格是Perl-Compatible(PCRE),所以lookbehind需要固定长度。
要搜索的示例文本:
<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>
正则表达式的期望行为:
第1行匹配 ">
FooBar <br />
第二行不匹配
第3行匹配 ">
Hello World <br />
第4行不匹配
">
和<br />
之间的文本将被捕获到要与替换函数一起使用的组中。我得到的最接近的是使用以下带有负前瞻的正则表达式,但这与所需的第3行不匹配:
">((?!.*?\[xcol]).*?)<br />
感谢任何帮助或建议。谢谢。
答案 0 :(得分:3)
试试这个正则表达式:
">((?!\[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]