如何用包含相同数字的链接替换字符串中的数字

时间:2016-11-13 10:31:34

标签: php preg-replace

我有一个简单的HTML页面,其中包含数字列表。像这样:

  

请看以下页面:23,509,209,11,139,68,70-72,50,409-412

我想用这样的超链接替换每个数字或范围:

  

<a href="www.mysite.com?page=23">23</a>, <a href="www.mysite.com?page=509">509</a> ..... <a href="www.mysite.com?page=409">409-412</a>

这些数字只有两位和三位数字,除了第一个和最后一个之外用逗号括起来。并且有一些范围,如391-397

2 个答案:

答案 0 :(得分:0)

只有在确定源字符串的模式

时才会这样
$numbers = "23, 509, 209, 11, 139, 68, 70-72, 50, 409-412";
$output = "";
$numbers = explode(",",$numbers);//split the string into array (NOTE:only if you trust the pattern of the string)

foreach($numbers as $number){
     $number = str_replace(" ","", $number); // remove the space that is after the comma if there is
     $range = explode("-",$number); // if it is a range it will be splitted
     $output .= "<a href='www.mysite.com?page=".$range[0]."'>$number</a> ";
}
echo $output;

HTML注意:制作像这个www.mysite.com这样的href属性会导致浏览器在当前文档位置之后追踪它的值,所以它会是这样的

 https://www.example.com/currentlocation/www.mysite.com?page=23

我想这就是你想要的

<a href='https://www.example.com?page=23'>

答案 1 :(得分:0)

您可以使用PHP preg_replace()来实现您的目标。

$original_string = 'Look at the following pages: 23, 509, 209, 11, 139, 68, 70-72, 50, 409-412';

$updated_string = preg_replace(
   '~((\d{2,3})(\-\d{2,3})?)~', 
   '<a href="//www.mysite.com?page=$2">$1</a>', 
   $original_string
);

echo $updated_string;

看到它正常工作here

()的第一个参数中的preg_replace()部分可以在$1$2等的第二个参数中引用...第一个封闭的部分({{ 1}})是页码或页面范围(“23”,“70-72”)。第二个封闭部分($1)是页码或页面范围的第一个数字。

有很多关于正则表达式在线信息的资源,你可以使用我编写的正则表达式here