regexp с русским языком

Я не могу решить проблему с регулярным выражением.

Хорошо, когда я печатаю:

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

все в порядке, кроме ситуации с русским языком.

поэтому, я пытаюсь переписать этот reg-exp:

 $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

пожалуйста, дайте мне простой вариант

Попробуйте использовать Unicode:

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

Не забывайте флаг / u для Unicode.

В твоем случае:

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

Обратите внимание, что STAR в вашем регулярном выражении является избыточным. Все уже «съедается» ПЛЮС. Это будет делать то же самое:

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

Общий скрипт unicode (поддерживаемый с момента установки pcre 3.3) обеспечивает проверку свойства кириллицы .

например, заменить все символы, которые не являются ни кириллическими, ни (латинскими) цифрами:

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

Вы можете найти документацию для этой функции по адресу http://www.pcre.org/pcre.txt «Свойства символа Юникода».
И вы должны указать флаг PCRE8 (u), как описано в http://docs.php.net/reference.pcre.pattern.modifiers

Это работало для меня:

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

Я тестировал во всех браузерах, включая Safari