0

文字列の不要な部分をカットし、残りの部分を残すスクリプトを作成しています。奇妙な問題があります-作成した正規表現は文字列に一致しますが、考えられるすべての兆候には一致しません。

テストされた文字列:

 $itemFullName = "10-16X4 POLI MG SELF START BLK PLASTIC";

私が持っている「パターン」:

POLI MG FT SDS BLK ZC

PHP コード:

if(preg_match("@(POLI){1}(.)+(BLK)@", $itemFullName))
{
    $itemAttributes = preg_replace("@(POLI){1}(.)+(BLK)@", "#", $itemFullName);
}

最後に $itemAttributes が次のように設定されます。

 "10-16X4 #K PLASTIC". 

正規表現が [POLI MG SELF START BL]K 部分のみをキャッチし、全体の一致POLI MG SELF START BLKではなく "#" に変更して置き換えたように見えます。

どうすれば修正できますか?

4

1 に答える 1

0

preg_matchの前に実行する必要はありませんpreg_replace。パターンが一致しない場合は、から返された元の文字列が返されpreg_replaceます。また、正規表現も単純化する必要があります。次のコードを試してください。

$itemAttributes = preg_replace('@\bPOLI\b.*?\bBLK\b@', '#', $itemFullName);

\b次のような予期しない一致の一致を避けるために、開始文字列と終了文字列を (単語境界) でラップしました。POLICY

于 2013-09-02T11:01:29.733 に答える