Domanda

Non riesco a risolvere il mio problema con regexp.

Ok, quando si digita:

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

tutto è ok, tranne che la situazione con la lingua russa.

così, cerco di riscrivere questa reg-exp:

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

, ma questo non funziona,

So che qualche idea, basta scrivere:

$string = preg_replace("#\[name=([a-zA-Z0-9йцукенгшщзхъфывапролджэячсмитьбю .-]+)*]#","$name_start $1 $name_end",$string);

, ma questo è pazzo: D

Per favore, dammi semplice variante

È stato utile?

Soluzione

Provare una gamma Unicode:

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

Non dimenticare il flag / u per Unicode.

Nel tuo caso:

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

Si noti che la stella nella vostra regex è ridondante. Tutto già viene "mangiata" dal PLUS. Ciò avrebbe fatto lo stesso:

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

Altri suggerimenti

Lo script unicode comune (supportato dal PCRE 3.3) fornisce un test per la proprietà cirillico .

es. sostituire tutti i caratteri che non sono né cirillico né (latino) cifre:

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

È possibile trovare la documentazione relativa a tale funzione in http://www.pcre.org/pcre.txt "proprietà dei caratteri Unicode".
E si deve specificare il flag PCRE8 (u) come descritto in http: //docs.php .net / reference.pcre.pattern.modifiers

Questo ha funzionato per me:

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

Ho testato in tutti i browser tra cui Safari

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top