2012-02-10 10 views
1
私はすべての単語を交換したい

ない内部【と】[テスト]で機能preg_replaceを使用してPHPで(例えば試験として)。正規表現ではなく内部の単語と一致[そして]

私は今、この権利をやった:

$txt = preg_replace('#([^\[])' . $word . '([^\]])#i', '[' . $word . ']', $txt); 

をしかしパターンは、テストここ

一致していない私のテストで:

$txt = 'atesta, test, [test], [atesta]'; 
$pattern = '#(?:^|[^\[])test(?:[^\]]|$)#i'; 
$replace = '[test]'; 
echo "$txt<br />"; 
$txt = preg_replace($pattern, $replace, $txt); 
echo "$txt<br />"; 
$txt = preg_replace($pattern, $replace, $txt); 
echo "$txt<br />"; 
+0

ここに書かれているとおり、単語_must_b行頭の単語や行末の単語は一致しません。 – Mei

+0

ここで角括弧をエスケープする必要はありません。 '[^] 'はクラス内で意味を持たないので大丈夫です。クラスは少なくとも1つの文字を含んでいなければならないので、' [^]] 'はOKです。 ']'の中で特別な意味を持たない(クラスの先頭や末尾に '-'と似た意味には似ています) –

+0

テスト文字列ごとに何をしたいのですか?そして、大括弧なしの 'atesta'はどうですか? – Toto

答えて

0

方法について:

$txt = preg_replace('#(?:^|[^\[])'.$word.'(?:[^\]]|$)#i', '['.$word.']', $txt); 
+0

[テスト]の場合は動作するので、これは部分的に動作しますが、[test1、test2]のために動作します。 – Bouki

+0

@ Bouki:ケース。 – Toto

+0

ちょうど私のポストを更新しました。事実は私が[atesta]を持つことができます(テストはimmediatly [と]ではなく、前後に何かがあることがあります) – Bouki

関連する問題