2013-04-28 2 views
2

Я пытаюсь выполнить множественный поиск и заменить в строке с указанием списка префиксов.preg_match множественный поиск заменить в строке

Например:

$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 в качестве ссылок на их соответствующие номера.

SOLVED, используя этот кусок кода, представленный 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

Что находится в '$ input'? Вы никогда не определяете его. –

ответ

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); 
+0

Только то, что я искал! Спасибо! – user2001487

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); 
} 

ваша новая переменная линия будет иметь все три URLs приложенные к нему, как показано, но вы можете изменить это сделать watever вы хотите с URLs ..

Смежные вопросы