PHP preg_match与克罗地亚字符

时间:2015-05-04 07:35:53

标签: php regex

我是正则表达式的新手,但是在StackOverflow上进行了一些搜索,我设法得到了我想要的东西(如果2个单词被逗号分隔,则返回true,如果不是这样,则返回false或除了克罗地亚字符有问题(č,ć,ž,đ,š大写和小写)之外,这个词以逗号结尾,但后面没有任何内容。我当前的preg_match看起来像

 if (preg_match('/^(([a-zA-Z0-9]+\\s*,\\s*)+(\\s*)([a-zA-Z0-9]+))$/', $data)) 
{
   //do stuff

}

但是这种方法的问题是如果它有Čćž,它将不会返回true ...我知道这是因为{{1}这不会“看”这个字符。所以,我的问题是如何编写一个将使用克罗地亚字符返回true的正则表达式。如果可以做到这一点,也可以随意发表评论,因为我想听听你的建议。顺便说一句,我是在regex101.com

的帮助下完成的

1 个答案:

答案 0 :(得分:6)

\p{L}简写类和u选项可以匹配Unicode字母。

This program返回FOUND!

$data = "Čdd, ćdd, žddd";
if (preg_match('/^(([\\p{L}0-9]+\\s*,\\s*)+(\\s*)([\\p{L}0-9]+))$/u', $data)) 
{
  echo "<h1>FOUND!</h1>";
}

根据Regular-Expressions.info

  

您可以匹配属于&#34;字母&#34;的单个字符。类别   与\p{L}

its another page devoted to PHP regex

  

您应为使用/u\x{FFFF}或的正则表达式指定\X   \p{L}匹配Unicode字符,字形,属性或脚本。   PHP会将'/regex/u'解释为UTF-8字符串而不是   ASCII字符串。

另请参阅preg_match function文档页面上的一个示例:

  

对于那些使用搜索unicode正则表达式示例的人   preg_match这里是:

     

检查波斯数字preg_match( "/[^\x{06F0}-\x{06F9}\x]+/u" , '۱۲۳۴۵۶۷۸۹۰' );