正则表达式匹配网址模式不起作用

时间:2014-05-20 00:29:45

标签: php regex

我很难创建一个正则表达式,该表达式应匹配在特定模式上构建的所有网址,例如http://subdomain.example.com/reply/aoo/spo/4429163785

这是我到目前为止写的正则表达式。

"/(^https?)(\:\/\/)([a-z]+)(\.craigslist\.org/reply)\/([a-z]{3}\/spo)\/([0-9]{10}$)/"

请帮我改进我的正则表达式。

2 个答案:

答案 0 :(得分:1)

将分隔符更改为其他内容,这样您就不必偶尔转义它。另外,请勿捕获不允许任何变化的字符串部分(例如.craigslist.org/reply/):

"~^(https?)://([a-z]+)\\.craigslist\\.org/reply/([a-z]{3})/spo/([0-9]{10})$~"

说明:
~开头分隔符
^匹配字符串的开头
(https?)匹配httphttps - 抓住它 ://匹配冒号后跟两个正斜杠 ([a-z]+)匹配一个或多个小写字符 - 捕获它 \\.匹配期间
craigslist完全按照给定的字符匹配字符 \\.匹配期间
org/reply/完全按照给定的字符匹配字符 ([a-z]{3})匹配三个小写字符 - 捕获它 /spo/完全按照给定的字符匹配字符 ([0-9]{10})匹配十个数字字符 - 捕获它 $匹配字符串的结尾
~结算分隔符

答案 1 :(得分:1)

"/(^https?)(\:\/\/)([a-z]+)(\.craigslist\.org\/reply)\/([a-z]{3}\/spo)\/([0-9]{10}$)/"

在回复之前,您忘了在.org部分之后逃离/