我使用的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]

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top