9

正規表現の問題を解決できません。

わかりました、私が入力すると:

$string = preg_replace("#\[name=([a-zA-Z0-9 .-]+)*]#","$name_start $1 $name_end",$string);

ロシア語の状況を除いて、すべて問題ありません。

だから、私はこの正規表現を再入力しようとします:

$string = preg_replace("#\[name=([a-zA-Z0-9**а-яА-Я** .-]+)*]#","$name_start $1 $name_end",$string);

しかし、これは機能しません。

私はいくつかのアイデアを知っています、ただ書いてください:

$string = preg_replace("#\[name=([a-zA-Z0-9йцукенгшщзхъфывапролджэячсмитьбю .-]+)*]#","$name_start $1 $name_end",$string);

しかし、これはクレイジーです:D

簡単なバリエーションを教えてください

4

4 に答える 4

18

Unicode 範囲を試してください:

'/[\x{0410}-\x{042F}]/u'  // matches a capital cyrillic letter in the range A to Ya

Unicode の /u フラグを忘れないでください。

あなたの場合:

"#\[name=([a-zA-Z0-9\x{0430}-\x{044F}\x{0410}-\x{042F} .-]+)*]#u"

正規表現の STAR は冗長であることに注意してください。すべてがすでに PLUS によって「食べられ」ています。これは同じことをします:

"#\[name=([a-zA-Z0-9\x{0430}-\x{044F}\x{0410}-\x{042F} .-]+)]#u"
于 2009-10-15T09:19:46.117 に答える
7

一般的な Unicode スクリプト (pcre 3.3 以降でサポート) は、プロパティCyrillicのテストを提供します。

たとえば、キリル文字でも (ラテン) 数字でもないすべての文字を置き換えます。

$string = '1a2b3cйdцeуfкбxюy';
echo preg_replace('/[^0-9\p{Cyrillic}]/u', '*', $string);

この機能のドキュメントは、http://www.pcre.org/pcre.txt "Unicode character properties" にあります。また、 http:
//docs.php.net/reference.pcre.pattern.modifiers で説明されているように、PCRE8 フラグ (u) を指定する必要があります。

于 2009-10-15T09:30:44.683 に答える