gpt4 book ai didi

regex - 匹配除变量字符串之外的所有内容

转载 作者:行者123 更新时间:2023-12-02 00:44:38 25 4
gpt4 key购买 nike

我已经能够匹配字符串中的所有文本,如下所示:

[!--$element--]

使用下面的正则表达式:

\[!--(.*?)]

但是,现在我想匹配除上述字符串之外的所有内容,但似乎无法使其工作。我尝试使用 not ^ 表达式和look-ahead ?! 表达式,但似乎无法正确执行。

例如,

我想要

This is an [!--$element--]

变成:

[!--$element--]

我正在使用 PHP preg_replace() 删除所有不是 [--$element--] 的文本

知道我该怎么做吗?

最佳答案

捕获组、(*SKIP)(*F) 或拆分

为了满足这一点,我们有多种选择。

选项 1:使用捕获组

这是一个较长的方法,但它适用于所有引擎。

\[!--[^-]*--\]|((?:(?!\[!--[^-]*--\]).)+)

您想要的字符串位于第 1 组中。在 the Regex Demo,查看右侧面板中的捕获内容。

选项 2:(*跳过)(*F)

这仅适用于 Perl 和 PCRE(因此也适用于 PHP)。它直接匹配字符串。

\[!--[^-]*--\](*SKIP)(*F)|(?:(?!\[!--[^-]*--\]).)+

the Regex Demo ,查看匹配的字符串。

选项 3:拆分

Match All and Split are Two Sides of the Same Coin ,所以我们可以使用 preg_split 而不是 preg_match_all。通过分割字符串,我们删除了想要排除的部分。

$element_regex = '~\[!--[^-]*--\]~';
$theText = preg_split($element_regex, $yourstring);

说明

这个问题是这个问题中解释的技术的经典案例"regex-match a pattern, excluding..."

选项 1. 在选项 1 中,交替 | 的左侧与完整的 [!--$element--] 匹配。我们将忽略这些匹配。右侧匹配并捕获其他文本,我们知道它是正确的,因为它与左侧的表达式不匹配。

选项 2。在选项 2 中,交替 | 的左侧匹配完整的 [!--$element--] 然后故意失败,之后引擎跳到下一个位置字符串。右侧与您想要的 this 单词匹配,我们知道它们是正确的,因为它们与左侧的表达式不匹配。

引用

关于regex - 匹配除变量字符串之外的所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25025889/

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