Я не могу решить проблему с регулярным выражением.
Хорошо, когда я печатаю:
$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