0

preg_replace($oldWords, $newWords, $string);単語の配列を置き換えるために使用しています。

intoで始まるすべての単語とfoointohelloで始まるすべての単語を置き換えたいbarworld

つまり、にfoo123変更する必要があります、に変更する必要があります、などに変更する必要があります。hellofoobarhellobarx5world

私の配列が次のように定義されている場合:

$oldWords = array('/foo/', '/bar/');  
$newWords = array('hello', 'world');

その後、にfoo123変更されhello123、ではありませんhello。同様にbarx5変化し、変化しworldx5ないworld

完全に一致した単語を置き換えるにはどうすればよいですか?

ありがとう。

4

2 に答える 2

0

それを行う 1 つの方法は、配列をループして各単語をチェックすることです。最初の 3 文字だけをチェックしているので、正規表現関数は遅いため、正規表現の代わりに substr() を使用します。

    foreach( $oldWords as $word ) {

        $newWord = substr( $word, 0, 2 );

        if( $newWord === 'foo'  ) {
            $word = 'hello';
        }
        else if( $newWord === 'bar' ) {
            $word = 'world';
        }

    };
于 2012-07-13T22:07:36.797 に答える
0

正規表現と preg_replace の仕組みを理解していれば、これは実際には非常に簡単です。

まず、置換配列が正しく形成されていません。とは:

$oldWords = array('\foo\', '\bar\');

代わりに次のようにする必要があります。

$oldWords = array('/foo/', '/bar/');

PHP のバックスラッシュはその後の文字をエスケープするため、文字列が非文字列に変換され、コードの残りの部分が台無しになっていたことを意味します。

ただし、実際の質問に関しては、これで目的の効果を得ることができます。

$oldWords = array('/foo\w*/', '/bar\w*/');

\wは任意の単語文字に一致し、*は 0 または任意の数の一致を意味する量指定子です。

これらの 2 つの項目を追加すると、regex は foo とその直後の x 個の単語文字を含む任意の文字列に一致します。これが preg_replace によって置き換えられます。試合。

于 2012-07-13T22:07:47.657 に答える