使用正则表达式preg_replace - 在 URL 中查找数字序列


preg_replace with Regex - find number-sequence in URL

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

我有一个如下所示的网址:

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+)