ワードVに任意の3文字以下の単語を変換するREGEX
-
21-09-2019 - |
質問
私はそれに接続されている文字列VVVと同じ単語に3文字以下での単語のいずれかの発生を変換しようとしています。
例:について - > forVVV
私は、それゆえなしラテン文字(UTF8)、MBを使用しています。
私が持っていることはあります:
$pattern='\b[.{1,6}]\b';
$text=mb_ereg_replace($pattern,'\0VVV',$text,'me');
私は何をしないのですか?
ここケーススタディである、それは何もキャッチしない参照してください。
$text="א אב אבי אביהו מדינה שול של";
$pattern='/\b.{1,6}\b/um';
$text=preg_replace($pattern,'hhh',$text);
echo $text;
解決
あなたがしているパターンの物事を正しく検出またはグループ化ではない。
代わりに角括弧の単語の文字と標準括弧のための使用\w
、とあなたは単にそうe
フラグを必要としない、撮影したテキスト・セグメントを参照している、交換にPHPコードを評価していません。
$pattern = '\b(\w{1,3})\b';
$text = mb_ereg_replace($pattern, '\0VVV', $text, 'm');
また、ユニコードフラグを使用preg_replace
$text = preg_replace('/\b\w{1,3}\b/um', '\0VVV', $text)
あなたはアラビア語と右から左へ文字に対応するために必要がある場合は、あなたが私たちに必要なの代わりに\w
と\b
のユニコード文字のプロパティを(\w
は、すべての言語からの手紙と一致していない、と\b
は\w\W
と\W\w
の間で一致しました - これは両方壊れWRT。非ラテン言語です。)
このinteadをお試しください
$text = preg_replace('/(?
(and again cos I can't tell whether I need to encode < or not)
$text = preg_replace('/(?<!\PL)(\pL{1,3})(?:\PL)/um', '\1VVV', $text);
他のヒント
これはあなたが望むものと一致する必要がありますか?
\b(?<Match>\w{1,3})\b
所属していません StackOverflow