将另一个正则表达式添加到现有表达式
Add another regular expression to an existing expression
我不熟悉正则表达式。我正在尝试理解它,但这很难。
我有一个正则表达式,可以将任何 URL 包装在锚标记中。但是,它还包装了已经在锚标记中的 URL。我想避免这种情况,所以我找到了一个正则表达式来为我做这件事。
?![^<]*</a>
但是,我不知道如何将它添加到我现有的正则表达式中。这是我当前的正则表达式:
preg_replace('!(((ht)tp(s)?://)[-a-zA-Zа-яА-Я()0-9@:%_+.~#?&;//=]+)!i', '<a href="" target="_blank"></a>', $text); ?>
那么,如何跳过已经包含在锚标记中的 URL?
我要加入合唱团并说:不要为此使用正则表达式 - 使用 html 解析器。
这就是说 - 您发现 的正则表达式本身并不是真正的正则表达式。 种 检查您是否处于锚定状态,这是负面预测的一部分。 (它实际上应该是 (?![^<]*</a>)
。)它会检查下一个 <
(或结尾)之后的文本后面是否没有 </>
。
将此附加到原始 RE 的末尾 有时 可以达到目的。我不会花时间思考它会失败的情况 - 但它可能会失败。
除了一些简化之外,您的正则表达式应该如下所示:
(https?:\/\/[-\wа-яА-Я()@:%+.~#?&;\/=]+)(?![^<]*<\/a>)
这可能对您有用大部分,但有时也会失败。
此致
我不熟悉正则表达式。我正在尝试理解它,但这很难。
我有一个正则表达式,可以将任何 URL 包装在锚标记中。但是,它还包装了已经在锚标记中的 URL。我想避免这种情况,所以我找到了一个正则表达式来为我做这件事。
?![^<]*</a>
但是,我不知道如何将它添加到我现有的正则表达式中。这是我当前的正则表达式:
preg_replace('!(((ht)tp(s)?://)[-a-zA-Zа-яА-Я()0-9@:%_+.~#?&;//=]+)!i', '<a href="" target="_blank"></a>', $text); ?>
那么,如何跳过已经包含在锚标记中的 URL?
我要加入合唱团并说:不要为此使用正则表达式 - 使用 html 解析器。
这就是说 - 您发现 的正则表达式本身并不是真正的正则表达式。 种 检查您是否处于锚定状态,这是负面预测的一部分。 (它实际上应该是 (?![^<]*</a>)
。)它会检查下一个 <
(或结尾)之后的文本后面是否没有 </>
。
将此附加到原始 RE 的末尾 有时 可以达到目的。我不会花时间思考它会失败的情况 - 但它可能会失败。
除了一些简化之外,您的正则表达式应该如下所示:
(https?:\/\/[-\wа-яА-Я()@:%+.~#?&;\/=]+)(?![^<]*<\/a>)
这可能对您有用大部分,但有时也会失败。
此致