我是一个正则表达式的人,很抱歉这个"简单"问题:
我有一个如下网址:
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"
感谢您的回答!
答案 0 :(得分:0)
您可以使用:
$re = '/[^-.]+(?=\.aspx)/i';
preg_match($re, $input, $matches);
//=> 146370543
这会匹配不是连字符而不是点的文字,后面跟着.aspx
使用前瞻(?=\.aspx)
。
答案 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+)