我正在尝试创建一个正则表达式,可用于从 PHP 函数中的两个不同 url 中提取数字。这些网址的格式是:
/t/2121/title/
和
/top2121.html
我不擅长正则表达式,并且已经尝试过以下及其许多变体:
#^/t/(\d+?)/|/top(\d+?)\.html/#i
这没有做任何事情,在阅读了许多有关正则表达式的网站和教程后,我仍然完全不知所措。是否有我可以创建的正则表达式允许我添加数字而不管输入的 url 格式是什么?
正则表达式仅提取数字,同时检查 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
我能够让这个正则表达式匹配两种类型的 url 格式:
#^/(?:(?:t/)|(?:top))(\d+)(?:(?:\.html)|(?:/))#i
如果有人有更有效的方式来执行相同的正则表达式,我很想听听。
如果您有这些 URL 中的任何一个,则可以使用此表达式。您的号码应存储在您的第二个位置:
#^/t(op|/)(\d+)(\.html|/.*)#i
网址中是否会有您不关心的数字?如果没有,您可以通过捕获数字并忽略其余部分来保持简单:
#(\d+)#