之间的任何文本和 的第一个实例在一行中,但匹配项不能包含字-6ren">
gpt4 book ai didi

正则表达式匹配字符串的一部分,当匹配不包含特定字符串时 - PCRE grep

转载 作者:行者123 更新时间:2023-12-02 00:35:53 26 4
gpt4 key购买 nike

我正在使用 TextWrangler grep 对多个文件执行查找/替换,但在我需要执行的最后一个查找/替换时遇到了障碍。我需要匹配 "> 之间的任何文本和 <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 />将被捕获​​在一个组中以与替换功能一起使用。我得到的最接近的是使用以下具有负前瞻性的正则表达式,但这不会根据需要匹配第 3 行:

">((?!.*?\[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]

关于正则表达式匹配字符串的一部分,当匹配不包含特定字符串时 - PCRE grep,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4608492/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com