当匹配不包含特定字符串时,正则表达式匹配字符串的一部分 - PCRE grep
我正在使用 TextWrangler grep 对多个文件执行查找/替换,但我需要执行的最后一个查找/替换却遇到了麻烦。我需要匹配行中 ">
和
的第一个实例之间的任何文本,但匹配不能包含字符序列 [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
第二行不匹配
第三行匹配 ">
Hello World
第 4 行 不匹配
">
和
之间的文本将被捕获在一个组中,以便与我得到的最接近的是使用以下带有负向预测的正则表达式,但这与所需的第三行不匹配:
">((?!.*?\[xcol]).*?)<br />
感谢任何帮助或建议。
I'm using TextWrangler grep to perform find/replace on multiple files and have run into a wall with the last find/replace I need to perform. I need to match any text between ">
and the first instance of a <br />
in a line but the match cannot contain the character sequence [xcol]. The regex flavor is Perl-Compatible (PCRE) so lookbehind needs to be fixed-length.
Example Text to Search:
<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>
Desired behavior of regex:
1st Line match ">
FooBar<br />
2nd Line no match
3rd Line match ">
Hello World<br />
4th Line no match
The text between ">
and the <br />
will be captured in a group to be used with the replace function. The closest I got was using the following regex with negative lookahead, but this will not match the 3rd line as desired:
">((?!.*?\[xcol]).*?)<br />
Any help or advice is appreciated. Thank you.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
试试这个正则表达式:(
简短)解释:
如果您还需要匹配
.
的换行符,请启用 DOT-ALL(在 < 之前添加(?s)
code>.) 或将.
替换为[\s\S]
Try this regex:
A (short) explanation:
If you need to match line breaks for
.
as well, either enable DOT-ALL (add(?s)
before the.
) or replace the.
with something like[\s\S]