我是正则表达式的新手,但是在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
答案 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>";
}
您可以匹配属于&#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" , '۱۲۳۴۵۶۷۸۹۰' );