0

3文字以下の単語の出現を、文字列VVVが付加された同じ単語に変換しようとしています。
例:for-> 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;
4

2 に答える 2

0

これはあなたが望むものと一致するはずですか?

\b(?<Match>\w{1,3})\b
于 2009-09-03T17:49:52.717 に答える
0

あなたのパターンは物事を正しく検出またはグループ化していません。

角かっこの代わりに単語文字と標準の括弧に使用\wします。置換で PHP コードを評価しているのではなく、単にキャプチャされたテキスト セグメントを参照しているだけなので、eフラグは必要ありません。

$pattern = '\b(\w{1,3})\b';
$text = mb_ereg_replace($pattern, '\0VVV', $text, 'm');

preg_replaceまたは、次の unicode フラグを使用します。

$text = preg_replace('/\b\w{1,3}\b/um', '\0VVV', $text)

アラビア語や右から左への文字に対応する必要がある場合は、\wand \b(\wはすべての言語の文字に一致するわけではなく、andの\b間のみに一致するのではなく、Unicode 文字プロパティを使用する必要があります。これらは両方とも wrt で壊れています。言語)。\w\W\W\w

代わりにこれを試してください:

$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);
于 2009-09-03T15:33:24.447 に答える