如果该URL不包含禁止文本,则正则表达式从URL捕获一些ID

时间:2014-09-23 04:27:48

标签: regex url

我创建了以下正则表达式来创建一个10位数的id(理想情况下,它不会考虑超过10的数字集,例如id = 12345678901)。在找到最后一组10个数字之后,它会丢弃它之后的所有内容,除非它碰到括号或引号。在那种情况下它会停止。

 www.site1\.com\/((?!someid\=12345name).)*([0-9]{10})[^\"\'\[\]\n\s]*

然而,在下面这样的例子中,它不会停留在10位数字之后的捣蛋鬼或吵闹,并且一直持续到找到另一个数字:

[网址='http://www.site1.com/path/445-453/L?test=3456&test2=333629710&item=1058371930']此网址的某些标题[/ URL]或[网址='http://www.site1.com/path/445-453/L?test=3456&test2=333629710&item=2932475321']部分网址标题2 [/ URL]

有关更多示例,请参阅实时网址:http://regex101.com/r/pG5fA4/2

仅供参考 - 注意某些链接具有相同的参数,其中包含10位数字ID。就像现在一样,我希望它只选择最后一组10位数字,只要它不会超过括号或引号。

谢谢!

1 个答案:

答案 0 :(得分:1)

*贪心运算符。由于贪婪的运算符,.*将匹配所有字符(换行符除外),直到它到达字符串最末端的最后一组数字。使用*?进行非贪婪的匹配。这可以保证量化点只匹配模式成功所需的字符数。

((?!someid\=12345name).)*?([0-9]{10})
                         ^

如果您想要在最后&' []之前设置一组数字,则可以使用前瞻。

www\.site1\.com/((?!someid=12345name).)*?([0-9]{10})(?=[\[\]'\s]|&[^&]*\n)