1

我正在尝试编写一个规则来匹配顶级域,后跟五位数字。我的问题出现了,因为我现有的 pcre 与我所描述的内容相匹配,但在 URL 的后面很晚,然后在我想要的时候。我希望它在 TLD 的第一次出现时匹配,而不是在其他任何地方匹配。检查这一点的简单方法是在 TLD 之前没有出现“/”字符时匹配它。我尝试使用negative-lookbehind,但这不起作用,因为它只能回顾一个字符。

例如:它目前的工作方式

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

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

例如:我希望它如何工作

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

在 .net/12345 上匹配并忽略 .com/12345 上的后续匹配

我现在的表情

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

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

4

2 回答 2

1

你很接近:)

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

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

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

它是如何工作的?

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

这是regex101 上一个工作示例的永久链接。
干杯!

于 2014-03-01T00:02:39.777 回答
0

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

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

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

于 2014-03-01T00:16:39.153 回答