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

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top