gpt4 book ai didi

.net - 如何对整个捕获组应用负向前瞻?

转载 作者:行者123 更新时间:2023-12-02 15:48:15 24 4
gpt4 key购买 nike

鉴于以下正则表达式和主题文本,为什么负前瞻仅适用于指定捕获组 URL 的最后一个字符?

// Regex
(?<URL>(?<Protocol>\w+):\/\/(?<Domain>[\w@][\w.:@]+)\/?[\w\.?=%&=\-@/$,]*)(?!'|"|(</a))

// Subject text
<p><a href="http://example.com">http://example.com</a> and http://example.com</p>

此正则表达式具有否定的前瞻 (?!"|(</a))这是尝试不匹配 <a> 内的 URL标签。这是通过检查 URL 后面是否跟有引号( '" )或结束语 </a 来完成的。标签。

我得到以下结果

http://example.co  
http://example.co
http://example.com

我希望负向前瞻适用于整个捕获组,而不仅仅是它的最后一个字符。这可能吗?我究竟做错了什么?我期望仅匹配 http://example.com 的最后一个实例被捕获。

最佳答案

因为当负向前瞻失败时,量词(以及任何其他可以的)将回溯,直到找到匹配项。

您可以使用 atomic groups 强制表达式不回溯(?>表达式):

(?<URL>(?>(?<Protocol>\w+):\/\/(?<Domain>[\w@][\w.:@]+)\/?[\w\.?=%&=\-@/$,]*))(?!'|"|(</a))

关于.net - 如何对整个捕获组应用负向前瞻?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15297833/

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