1

我正在尝试创建一个正则表达式,可用于从 PHP 函数中的两个不同 url 中提取数字。这些网址的格式是:

/t/2121/title/

/top2121.html

我不擅长正则表达式,并且已经尝试过以下及其许多变体:

#^/t/(\d+?)/|/top(\d+?)\.html/#i

这没有做任何事情,在阅读了许多有关正则表达式的网站和教程后,我仍然完全不知所措。是否有我可以创建的正则表达式允许我添加数字而不管输入的 url 格式是什么?

4

5 回答 5

1

如果您只想要后面的第一个数字t而不管/介于两者之间,这样的事情可能会起作用:#t/?(\d+)#i

编辑:

示例:http ://codepad.viper-7.com/0z3ee0

于 2013-02-06T19:33:47.433 回答
1

正则表达式仅提取数字,同时检查 url 是否与接受的格式匹配:

#^\/t(?:\/(\d+)\/[a-z_-]+\/?|op(\d+)\.html)$#i 编辑:2组捕获

在这里解释演示:http ://regex101.com/r/dO5dI4

变体 #2: 在同一组中捕获

#^\/t(?|\/(\d+)\/[a-z_-]+\/?$|op(\d+)\.html$)#i

在这里解释演示:http ://regex101.com/r/cG9vC3

于 2013-02-06T21:30:19.860 回答
0

我能够让这个正则表达式匹配两种类型的 url 格式:

#^/(?:(?:t/)|(?:top))(\d+)(?:(?:\.html)|(?:/))#i

如果有人有更有效的方式来执行相同的正则表达式,我很想听听。

于 2013-02-06T20:55:24.197 回答
0

如果您有这些 URL 中的任何一个,则可以使用此表达式。您的号码应存储在您的第二个位置:

#^/t(op|/)(\d+)(\.html|/.*)#i
于 2013-02-06T20:57:07.910 回答
0

网址中是否会有您不关心的数字?如果没有,您可以通过捕获数字并忽略其余部分来保持简单:

#(\d+)#
于 2013-02-06T21:03:34.403 回答