我是一个正则表达式菜鸟,很抱歉这个"简单"的问题:
我有一个如下所示的网址:
http://stellenanzeige.monster.de/COST-ENGINEER-AUTOMOTIVE-m-w-Job-Mainz-Rheinland-Pfalz-Deutschland-146370543.aspx
我要归档的是将数字序列(又名 Job-ID)放在带有 preg_replace 的".aspx"之前。
我已经发现找到它的正则表达式可能是
(?!.*-).*(?='.)
现在preg_replace需要与该正则表达式相反的表达式。我该如何存档?还值得一提的是:
URL 中可以包含多个数字。我只需要".aspx"之前的序列。此外,".aspx"后面可能有一些php属性,如"&mobile=true"
感谢您的回答!
您可以使用:
$re = '/[^-.]+(?='.aspx)/i';
preg_match($re, $input, $matches);
//=> 146370543
这将匹配文本而不是连字符而不是点,然后是使用前瞻(?='.aspx)
.aspx
。
正则表达式演示
你可以只使用preg_match
(你不需要preg_replace
,因为你不想改变原始字符串)并捕获.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
。第二个元素包含通过使用[0-9]+
两边的括号捕获的组。
您可以使用此正则表达式得到相反的结果:
('D*)'d+(.*)
工作演示
MATCH 1
1. [0-100] `http://stellenanzeige.monster.de/COST-ENGINEER-AUTOMOTIVE-m-w-Job-Mainz-Rheinland-Pfalz-Deutschland-`
2. [109-114] `.aspx`
即使您只想要该 url 的数字,您也可以使用此正则表达式:
('d+)