Regexp com Lang Russian
Pergunta
Não consigo resolver meu problema com o regexp.
Ok, quando eu digito:
$string = preg_replace("#\[name=([a-zA-Z0-9 .-]+)*]#","$name_start $1 $name_end",$string);
Tudo está ok, exceto a situação com a língua russa.
Então, eu tento re-Type este Reg-EXP:
$string = preg_replace("#\[name=([a-zA-Z0-9**а-яА-Я** .-]+)*]#","$name_start $1 $name_end",$string);
Mas isso não está funcionando,
Eu sei uma ideia, apenas escreva:
$string = preg_replace("#\[name=([a-zA-Z0-9йцукенгшщзхъфывапролджэячсмитьбю .-]+)*]#","$name_start $1 $name_end",$string);
Mas isso é loucura: D
Por favor, me dê uma variante simples
Solução
Experimente um alcance Unicode:
'/[\x{0410}-\x{042F}]/u' // matches a capital cyrillic letter in the range A to Ya
Não se esqueça da bandeira /U para Unicode.
No seu caso:
"#\[name=([a-zA-Z0-9\x{0430}-\x{044F}\x{0410}-\x{042F} .-]+)*]#u"
Observe que a estrela em seu regex é redundante. Tudo já é "comido" pela vantagem. Isso faria o mesmo:
"#\[name=([a-zA-Z0-9\x{0430}-\x{044F}\x{0410}-\x{042F} .-]+)]#u"
Outras dicas
O script Unicode comum (suportado desde o PCRE 3.3) fornece um teste para a propriedade cirílico.
Por exemplo, substitua todos os caracteres que não são cirílicos nem dígitos (latinos):
$string = '1a2b3cйdцeуfкбxюy';
echo preg_replace('/[^0-9\p{Cyrillic}]/u', '*', $string);
Você pode encontrar a documentação para esse recurso em http://www.pcre.org/pcre.txt "Propriedades do caractere unicode".
E você deve especificar o sinalizador pcre8 (u), conforme descrito em http://docs.php.net/reference.pcre.pattern.modifiers
Este funcionou para mim:
/^[а-яА-Я\p{Cyrillic}0-9\s\-]+$/
Eu testei em todos os navegadores, incluindo Safari