Вопрос

Я не могу решить свою проблему с 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"

Обратите внимание, что звезда в вашей регуляции является избыточной. Все уже "съедено" плюсом. Это сделает то же самое:

"#\[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 «Свойства символов Unicode».
И вы должны указать флаг pcre8 (u), как описано на http://docs.php.net/reference.pcre.pattern.modifiers

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top