gpt4 book ai didi

regex - 为什么这两个正则表达式不一样?

转载 作者:行者123 更新时间:2023-12-03 23:00:43 25 4
gpt4 key购买 nike

我最近回答 this question这让我开始考虑模拟可变宽度的lookbehinds。
不起作用:

(?:(?<=<\/)|(?<=<))[^ >]+
https://regex101.com/r/1wQz5E/1/
作品:
(?:(?<=<\/)|(?<=<))[^ >\/]+
https://regex101.com/r/1wQz5E/2
期望是从匹配中省略结束标记的正斜杠。
我想弄清楚为什么我的第一个例子没有按预期运行。

源字符串:

<!DOCTYPE html>

<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<a></a>
</body>
</html>

最佳答案

对于当前示例,在此模式中 (?:(?<=<\/)|(?<=<))[^ >]+从当前位置往回看,最左边的只能是</<所以只有 1 个断言可以同时为真。
当它遇到<</title>第二个断言是正确的。尝试匹配时无法匹配,原因是 [^ >\/]不允许 / ,然后它移动到下一个位置,因为没有更多的模式要处​​理。
接下来是 </这对于第一个断言是正确的,并且 [^ >\/]+可以匹配以下字符。
所以它没有产生预期匹配的原因是因为在这个模式中 (?:(?<=<\/)|(?<=<))[^ >]+后视是相同的,但否定字符类[^ >]+ 可以 匹配 /</title>

关于regex - 为什么这两个正则表达式不一样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65956624/

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