俄语的正则表达式

时间:2009-10-15 09:12:32

标签: php regex unicode cyrillic

我用regexp无法解决我的问题。

好的,当我输入:

$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

请给我简单的变体

4 个答案:

答案 0 :(得分:18)

尝试使用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"

答案 1 :(得分:5)

常见的unicode脚本(自pcre 3.3起支持)为属性 Cyrillic 提供测试。

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字符属性”下找到该功能的文档 您必须按照http://docs.php.net/reference.pcre.pattern.modifiers

中的说明指定PCRE8标志(u)

答案 2 :(得分:0)

这个对我有用:

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

我已在所有浏览器中测试过,包括Safari

答案 3 :(得分:-1)

是互联网上最常用的字母之一。

这已经有一段时间了,我相信从 php 5.6 开始。

// Filter Chinese and Japanese HAN
if (preg_match("/\p{Han}+/u", " 余TEST杭丽人广播", $match)){echo "CHINESE, JAPANESE ";}
// Filter Cyrilic
if (preg_match("/\p{Cyrillic}/u", "Күңел радиосы ", $match)){echo "RUSSIAN ";}
// Filter Greek
if (preg_match("/\p{Greek}/u", "Πρακτορείο ", $match)){echo "GREEK ";}
// Filter Arabic
if (preg_match("/\p{Arabic}/u", "مشال راډیو", $match)){echo "ARABIC ";}
// Filter Armenian
if (preg_match("/\p{Armenian}/u", "Ազատություն ", $match)){echo "ARMENIAN ";}
// Filter Thai
if (preg_match("/\p{Thai}/u", "สวท.พะเยา", $match)){echo "THAI ";}
// Filter Georgian
if (preg_match("/\p{Georgian}/u", "რადიო თავისუფალი", $match)){echo "GEORGIAN";}

/* Output: */
/* CHINESE, JAPANESE RUSSIAN GREEK ARABIC ARMENIAN THAI GEORGIAN */