我正在尝试执行多重搜索,并在给定前缀列表的字符串中替换。
例如:
$string = "CHG000000135733, CHG000000135822, CHG000000135823";
if (preg_match('/((CHG|INC|HD|TSK)0+)(\d+)/', $string, $id)) {
# $id[0] - CHG.*
# $id[1] - CHG(0+)
# $id[2] - CHG
# $id[3] - \d+ # excludes zeros
$newline = preg_replace("/($id[3])/","<a href=\"http://www.url.com/newline.php?id=".$id[0]."\">\\1</a>", $string);
}
这只会改变CHG000000135733。如何使代码工作以将其他两个CHG编号替换为其相应编号的链接。
使用Casimir et Hippolyte提交的这段代码解决。
$newline = preg_replace ('~(?:CHG|INC|HD|TSK)0++(\d++)~', '<a href="http://www.url.com/newline.php?id=$0">$0</a>', $string);
答案 0 :(得分:1)
之前无需使用preg_match。在一行中:
$newline = preg_replace ('~(?:CHG|INC|HD|TSK)0++(\d++)~', '<a href="http://www.url.com/newline.php?id=$0">$1</a>', $string);
答案 1 :(得分:0)
你需要迭代它们:
$string = "CHG000000135733, CHG000000135822, CHG000000135823";
$stringArr = explode(" ", $string);
$newLine = "";
foreach($stringArr as $str)
{
if (preg_match('/((CHG|INC|HD|TSK)0+)(\d+)/', $str, $id)) {
# $id[0] - CHG.*
# $id[1] - CHG(0+)
# $id[2] - CHG
# $id[3] - \d+ # excludes zeros
$newline .= preg_replace("/($id[3])/","<a href=\"http://www.url.com/newline.php?id=".$id[0]."\">\\1</a>", $str);
}
你的新行变量会将所有三个url附加到它上面,但你可以使用url修改它你想要的wate ..