我不能解决我的问题与规则表达式。

确定,当I型:

$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是多余的。一切都已经得到由PLUS“吃掉”。这将做同样的:

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

其他提示

在共同的unicode脚本(因为PCRE 3.3支持)提供了一种用于测试的属性的西里尔

e.g。替换既不是西里尔也不(拉丁)位数的所有字符:

$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达网络/ reference.pcre.pattern.modifiers

这一个为我工作:

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

我已经在所有的浏览器包括Safari测试

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top