我无法用正则表达式解决我的问题。
好吧,当我键入:
$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
不要忘了对Unicode的/ u标志。
你的情况:
"#\[name=([a-zA-Z0-9\x{0430}-\x{044F}\x{0410}-\x{042F} .-]+)*]#u"
请注意,在你的正则表达式的STAR是多余的。 一切都已经得到由PLUS“吃掉”。 这将做同样的:
"#\[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测试