正则表达式添加仅查找 4 个数字,如果它们旁边有一个“-”


regex adding a only finding 4 numbers if they have a '-' next to it

我们有看起来像这样的网址 http://www.example.co.uk/example-product-3436.html 我希望能够使用将删除-unqiue number的 php 脚本。我将使用正则表达式来执行此操作。我找到了这个([^'d])[0-9]{4},它会找到任何四位数字,但我只希望它找到一个 4 位数字,如果它前面有一个-。我该怎么做?

//Regular expression
$regex = "/-(''d{4})''.html/";
//String to check
$string = "http://www.example.co.uk/example-product-3436.html"; 
//Output match to $match
preg_match($regex, $string, $match);
//Print the unique number
echo $match[1];

正则表达式的说明:

  1. /是正则表达式的开始
  2. -匹配连字符
  3. (...)是捕获组(要返回的内容(
  4. 'd匹配任何数字 ([0-9](
  5. {4}需要精确的四个字符('d{4}需要精确的四位数字(
  6. '.字面意思匹配字符".">
  7. html字面上匹配"html">
  8. /标志着正则表达式的结束

要替换前面带有连字符的 4 位数字,如果后跟 .html请使用前瞻:

$str = preg_replace('/-'d{4}(?='.html)/', "", $str);
  • -'d{4}匹配后跟 4 位数字的连字符
  • (?='.html)/.html是否领先

在 eval.in 观看演示

如果不也向右分隔'd{4}将在任何长度的数字内匹配>= 4。
您也可以在右侧使用'b字边界(如果这足以满足您的输入(。

你只需要对正则表达式进行微小的更改:

<?php
$url = 'http://www.example.co.uk/example-product-3436.html';
if(preg_match('/-[0-9]{4}/', $url, $matches)) {
    $cleanUrl = str_replace($matches[0], '', $url);
}
echo $cleanUrl;
相关文章: