0

私は|で問題を実験しています (または)およびphpの正規表現。

これが私がやりたいことです、例えば私はそれらの3つの文を持っています:

「りんごは食べてもいい」

"リンゴが赤くなると医者が青くなる"

「リンゴを食べるのが好き」

そして、アップルという単語をオレンジ色に変更したいとしましょう。これが私のコードです。

$oldWord="apple";
$newWord="orange";
$text = preg_replace('#^' . $oldWord . ' #', $newWord, $text);
$text = preg_replace('# ' . $oldWord . ' #', $newWord, $text);
$text = preg_replace('# ' . $oldWord . '$#', $newWord, $text);

もちろんそれは機能しますが、キーワードを含む1行のコードだけでそれを行うための適切な組み合わせを見つけられませんでした| (また)。

何か提案はありますか?ありがとう

4

5 に答える 5

1

なぜだけではないのstr_replace('apple', 'orange', $text);ですか?

編集:

ユーザーからのコメントごと:

preg_replace('/\bapple\b/', 'orange', $text);

式内の検索語を適切にエスケープすることに懸念がある場合:

$oldWord = preg_quote($oldWord, '/');
$text = preg_replace("/\b$oldWord\b/", $newWord, $text);
于 2012-11-19T17:41:56.330 に答える
1

So, if you want to replace the whole word only, that is, leave "pineapple" alone, then the str_replace method won't work. What you should be using is the word boundary anchor \b

preg_replace('#\b' + $oldWord + '\b#', $newWord, $text)
于 2012-11-19T17:45:16.970 に答える
0

正規表現によって。の周りのスペースが削除されることに注意してくださいapple。これが希望するものではなくapple、完全な単語である場合は単に置き換えたい場合は、他の人が推奨しているように、単語の境界を使用します。

$text = preg_replace('#\b' . $oldWord . '\b#', $newWord, $text);

スペースを削除する意図がある場合、ワード境界が必要になる可能性がありますが、スペースはオプションにします。

$text = preg_replace('#[ ]?\b' . $oldWord . '\b[ ]?#', $newWord, $text);

それらが存在する場合、それらも削除されます。そうでない場合、正規表現は気にしません。[ ]これは、スペースを入力するのと完全に同じですが、正規表現で読みやすくなっていることに注意してください。

于 2012-11-19T17:43:13.253 に答える
0

preg_replace代わりに使用するpreg_match

preg_replace('⁓\b'.$oldWord.'\b⁓', $newWord, $text)
于 2012-11-19T17:43:14.247 に答える
0

テストできませんが

$text = preg_match('#\b' . $oldWord . '\b#ig', $newWord, $text);

Shoudlはあなたの日を救います;)

于 2012-11-19T17:44:57.033 に答える