2

プレフィックスのリストを指定して、文字列内で複数の検索と置換を実行しようとしています。

例えば:

$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 のみを変更します。他の 2 つの 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);
4

2 に答える 2

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);
于 2013-04-29T00:08:51.857 に答える
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);
}

新しい行変数には、示されているように 3 つの URL すべてが追加されますが、URL を使用していつでも変更できます。

于 2013-04-29T00:07:58.913 に答える