2009-10-15 6 views
8

Ich kann mein Problem mit Regexp nicht lösen.regexp mit russischer Sprache

Ok, wenn ich schreibe:

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

alles in Ordnung ist, außer Situation mit der russischen Sprache.

so, ich versuche, diese reg-exp erneut eingeben:

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

aber dies nicht funktioniert,

ich eine Idee wissen, schreiben Sie einfach:

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

aber ist verrückt: D

bitte geben Sie mir einfache Variante

+0

getestet haben ... ein aus den Gründen bin ich froh, dass ich nicht Russisch bin :-P – brianreavis

Antwort

17

einen Unicode-Bereich Versuchen:

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

Sie die/u Flagge für Unicode nicht vergessen.

In Ihrem Fall:

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

Beachten Sie, dass der STAR in Ihrem regex redundant ist. Alles wird bereits vom PLUS "gefressen". Dies würde das gleiche tun:

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

danke! wenn ich 'du' addierst, sind alle Probleme gelöst – vorobey

+0

Thaks für diesen Code! –

+0

es ist schlecht, weil es unlesbar ist! Code muss einfach und lesbar sein :) – bmalets

5

Die gemeinsame Unicode-Skript (unterstützt, da PCRE 3.3) stellt einen Test für die Eigenschaft Kyrillisch.

z.B. Ersetzen Sie alle Zeichen, die weder kyrillisch noch (latein) Ziffern sind:

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

Sie die Dokumentation für diese Funktion unter http://www.pcre.org/pcre.txt „Unicode-Zeicheneigenschaften“ finden können.
Und Sie müssen die PCRE8 Flag angeben (u) wie bei http://docs.php.net/reference.pcre.pattern.modifiers beschrieben

+0

Ja, gute Punkte und Referenzen! –

+0

Afaik Es gibt keine (technischen) Unterschiede zwischen den "normalen" Skripten und der Angabe der Bereiche "manuell". Es ist also nur eine Frage der Wahl. Außer vielleicht, dass die Eigenschaftsnamen ein bisschen selbstdokumentierender sind. – VolkerK

0

Dieses ist für mich gearbeitet:

/^[а-яА-Я\p{Cyrillic}0-9\s\-]+$/ 

ich in allen Browsern wie Safari