web-dev-qa-db-ja.com

PHP string replaceは単語全体に一致

私はPHPを使用して完全な単語を置き換えたいです

例:私が持っている場合

$text = "Hello hellol hello, Helloz";

そして私は使用します

$newtext = str_replace("Hello",'NEW',$text);

新しいテキストは次のようになります

NEW hello1こんにちは、Helloz

PHPが返す

NEW hello1 hello、NEWz

ありがとう。

29
NVG

正規表現を使用します。 \bは、Wordの境界に一致します。

$text = preg_replace('/\bHello\b/', 'NEW', $text);

$textはUTF-8テキストを含むため、Unicode修飾子 "u"を追加する必要があります。これにより、非ラテン文字がWordの境界と誤解されないようになります。

$text = preg_replace('/\bHello\b/u', 'NEW', $text);
57
Lethargy

これに置き換えられた文字列内の複数の単語

    $String = 'Team Members are committed to delivering quality service for all buyers and sellers.';
    echo $String;
    echo "<br>";
    $String = preg_replace(array('/\bTeam\b/','/\bfor\b/','/\ball\b/'),array('Our','to','both'),$String);
    echo $String;
5
sandeep kumar

Array置換リスト:置換文字列が相互に置換する場合、 _preg_replace_callback_ が必要です。

_$pairs = ["one"=>"two", "two"=>"three", "three"=>"one"];

$r = preg_replace_callback(
    "/\w+/",                           # only match whole words
    function($m) use ($pairs) {
        if (isset($pairs[$m[0]])) {     # optional: strtolower
            return $pairs[$m[0]];      
        }
        else {
            return $m[0];              # keep unreplaced
        }
    },
    $source
);
_

明らかに/効率のために_/\w+/_はキーリスト/\b(one|two|three)\b/iに置き換えることができます。

1
mario

また、 T-Regx libraryを使用して、$または\置換中の文字

<?php
$text = pattern('\bHello\b')->replace($text)->all()->with('NEW');
0
Danon