2009-10-15 9 views
8

Nie mogę rozwiązać mojego problemu z wyrażeniem regularnym.regexp z rosyjskim językiem

Ok, gdy wpisuję:

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

wszystko jest ok, z wyjątkiem sytuacji z języka rosyjskiego.

tak, staram się wpisać ten REG-EXP

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

ale to nie działa,

wiem, jakiś pomysł, po prostu napisać:

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

ale to jest szalony: D

proszę, daj mi prosty wariant

+0

... jeden z powodów, dla których cieszę się, że nie jestem Rosjaninem :-P – brianreavis

Odpowiedz

17

Spróbuj zakres Unicode:

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

Nie zapomnij flagę/u dla Unicode.

W twoim przypadku:

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

Uwaga, że ​​gwiazda w regex jest zbędny. Wszystko już "zjedzone" przez PLUS. Byłoby to samo:

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

dzięki! kiedy dodam 'u' wszystkie problemy są rozwiązane – vorobey

+0

Thaks dla tego kodu! –

+0

To źle, bo jest nieczytelne! Kod musi być prosty i czytelny :) – bmalets

5

Wspólna skrypt Unicode (obsługiwany od PCRE 3.3) stanowi test dla właściwości cyrylicy.

np. zastąpić wszystkie znaki, które nie mają ani cyrylicy (Latin) cyfry:

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

można znaleźć dokumentację dla tej funkcji pod http://www.pcre.org/pcre.txt „właściwości znaków Unicode”.
I trzeba podać flagę PCRE8 (U), jak opisano w http://docs.php.net/reference.pcre.pattern.modifiers

+0

Tak, dobre punkty i referencje! –

+0

Afaik nie ma (technicznych) różnic między "zwykłymi" skryptami i określaniem zakresów "ręcznie". To tylko kwestia wyboru. Może z wyjątkiem tego, że nazwy właściwości są nieco bardziej samo-dokumentujące. – VolkerK

0

Ten pracował dla mnie:

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

Ja testowałem we wszystkich przeglądarkach łącznie Safari