正则表达式负面观察 - pcre

时间:2014-02-28 23:03:18

标签: regex pcre negative-lookbehind

我正在尝试编写规则以匹配顶级域名后跟五位数。我的问题出现了,因为我现有的pcre与我所描述的匹配,但后来在URL中,然后我想要它。我想让它匹配TLD的第一次出现,而不是其他任何地方。检查这一点的简单方法是在TLD与某些点之前未被“/”字符匹配时进行匹配。我尝试使用负面观察,但这不起作用,因为它只回顾一个单个字符。

例如:目前的工作方式

domain.net/stuff/stuff=www.google.com/12345

匹配.com / 12345即使我不想要这个匹配,因为它不是网址中的第一个TLD

例如:我希望它如何运作

domain.net/12345/stuff=www.google.com/12345

匹配.net / 12345并忽略.com / 12345

上的后一场比赛

我目前的表达

(\.[a-z]{2,4})/\d{5}

编辑:改写它所以如果将来有人遇到同样的问题,也许问题会更清楚。

2 个答案:

答案 0 :(得分:1)

你非常接近:)

您需要确保在匹配您要查找的内容之前(例如:(\.[a-z]{2,4})/\d{5}),自行开始以来您没有遇到任何/

我建议您在当前的正则表达式之前简单地预先^[^\/]*\.。 因此,产生的正则表达式将是:

^[^\/]*\.([a-z]{2,4})/\d{5}

它是如何运作的?

  • ^断言这是测试过的字符串
  • 的开头
  • [^\/]*接受任何不包含/
  • 的字符序列
  • \.([a-z]{2,4})/\d{5}是您要匹配的模式(.后跟2到4个小写字符,然后是/和至少5个数字。

这是permalink to a working example on regex101 干杯!

答案 1 :(得分:0)

您可以使用此正则表达式:

'|^(\w+://)?([\w-]+\.)+\w+/\d{5}|'

在线演示:http://regex101.com/