我想匹配/
的最后一个实例(我相信你使用[^/]+$
)并复制接下来四个或更少数字的内容,直到我找到一个短划线{{1} }。
我相信返回此数字的“正确”方法是通过preg_split,但我是
不确定。我知道的另一种方法是在-
上爆炸,阵列反向,在/
上爆炸,分配。我确定有更优雅的方式吗?
例如
-
不幸的是,我不像你们中的一些人那样是一个正则表达的大师。
这是一种做同样事情的丑陋方式。
example.com/12-something // get 12
example.com/996-something // get 996
example.com/12345-no-deal // return nothing
答案 0 :(得分:1)
/\/(\d{1,4})-[^\/]+$/
上的匹配应该符合第一个捕获变量中的数字。我道歉,我不写PHP而且我不想处理preg_match
的界面,但无论如何这都是正则表达式。
如果PHP现在支持非斜杠正则表达式分隔符,m#/(\d{1,4})-[^/]+$#
是那些使用较少倾斜牙签的版本。
答案 1 :(得分:1)
这应该有效
$str = "example.com/123-test";
preg_match("/\/([\d]{1,4})-[^\/]+$/", $str, $matches);
echo $matches[1]; // 123
确保###-word
部分在最后并且只有1-4位数。