正则表达式添加一个只找到4个数字,如果他们有' - '在它的旁边

时间:2016-02-15 09:28:58

标签: php regex

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

3 个答案:

答案 0 :(得分:3)

//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. /标志着正则表达式的结束

答案 1 :(得分:2)

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

$str = preg_replace('/-\d{4}(?=\.html)/', "", $str);
  • -\d{4}匹配连字符后跟4位数字
  • (?=\.html)/查看.html是否提前

See demo at eval.in

如果没有分隔到右侧\d{4}将匹配within numbers of any length >= 4 如果这足以让您输入,也可以使用右侧的\b word boundary

答案 2 :(得分:1)

您只需对正则表达式进行一些小改动:

<?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;