preg_replace with Regex - 在URL中查找数字序列

时间:2015-03-11 22:05:02

标签: php regex

我是一个正则表达式的人,很抱歉这个"简单"问题:

我有一个如下网址:

http://stellenanzeige.monster.de/COST-ENGINEER-AUTOMOTIVE-m-w-Job-Mainz-Rheinland-Pfalz-Deutschland-146370543.aspx

我想要的是在" .aspx"之前获得数字序列(又名Job-ID)。与preg_replace。

我已经发现找到它的正则表达式可能是

(?!.*-).*(?=\.)

现在preg_replace需要与正则表达式相反。我怎么能这样做呢?另外值得一提:

网址中可以包含多个数字。我只需要#34; .aspx"之前的序列。此外," .aspx"后面可能会有一些php属性。喜欢"& mobile = true"

感谢您的回答!

3 个答案:

答案 0 :(得分:0)

您可以使用:

$re = '/[^-.]+(?=\.aspx)/i'; 
preg_match($re, $input, $matches);
//=> 146370543

这会匹配不是连字符而不是点的文字,后面跟着.aspx使用前瞻(?=\.aspx)

RegEx Demo

答案 1 :(得分:0)

您可以使用preg_match(您不需要preg_replace,因为您不想更改原始字符串)并在{{1}之前捕获该数字},总是在最后,所以最简单的方法,我能想到的是:

.aspx

一个简短的解释:

<?php $string = "http://stellenanzeige.monster.de/COST-ENGINEER-AUTOMOTIVE-m-w-Job-Mainz-Rheinland-Pfalz-Deutschland-146370543.aspx"; $regex = '/([0-9]+)\.aspx$/'; preg_match($regex, $string, $results); print $results[1]; ?> 包含一系列结果;作为整个字符串,搜索的是完整的正则表达式,第一个元素包含此匹配,因此在此示例中它将是$result。第二个元素包含使用146370543.aspx周围的括号捕获的组。

答案 2 :(得分:0)

使用此正则表达式可以得到相反的结果:

(\D*)\d+(.*)

<强> Working demo

MATCH 1
1.  [0-100] `http://stellenanzeige.monster.de/COST-ENGINEER-AUTOMOTIVE-m-w-Job-Mainz-Rheinland-Pfalz-Deutschland-`
2.  [109-114]   `.aspx`

即使您只想要该网址的编号,也可以使用此正则表达式:

(\d+)