1

我正在尝试将 Notepad++ 正则表达式转换为 PHP 正则表达式,它基本上以这种格式从 URL 列表中获取 ID:

http://www.example.com/category-example/1371937-text-blah-blah-blah-2012.html
http://www.example.com/category-example/1471337-text-blah-blah-2-blah-2010.html

使用 Notepad++ 正则表达式函数,我分两步得到我需要的输出(逗号分隔的 ID 列表)

(.*)/ 替换为空格

-(.*) 用逗号替换

结果:1371937,1471337

我尝试用 PHP preg_replace 做类似的事情,但我不知道如何获得正确的正则表达式,下面的示例删除了除数字之外的所有内容,但它不能按预期工作,因为也可能存在不属于 ID 的数字。

$bb =   preg_replace('/[^0-9]+/', ',', $_POST['Text']);

?>

哪个是正确的结构?

谢谢

4

2 回答 2

1

如果您匹配:

http://www.example.com/category-example/1371937-text-blah-blah-blah-2012.html

要得到:

1371937

你会:

$url = "http://www.example.com/category-example/1371937-text-blah-blah-blah-2012.html";
preg_match( "/[^\d]+(\d+)-/", $url, $matches );
$code = $matches[1];

..它匹配所有非数字字符,然后是一个完整的数字字符串,直到它到达一个'-'

于 2012-05-20T01:02:06.000 回答
0

如果您只想找到 ID,那么您应该使用preg_match,而不是preg_replace

您已经失去了该模式的选项,最简单的是:

$url = 'http://www.example.com/category-example/1371937-text-blah-blah-blah-2012.html';
preg_match('/\d+/', $url, $matches);
echo $matches[0];

它只是在 URL 中找到第一组数字。这适用于示例。

于 2012-05-20T01:12:30.777 回答