我是正则表达式的新手,但是在StackOverflow上进行了一些搜索,我设法得到了我想要的东西(如果2个单词被逗号分隔,那么它返回true并返回false,如果不是这样或单词结束除了我有克罗地亚字符(č,ć,ž,đ,š大写和小写)的问题之外,用逗号但后面没有任何内容.我目前的preg_match样子
if (preg_match('/^(([a-zA-Z0-9]+\\s*,\\s*)+(\\s*)([a-zA-Z0-9]+))$/', $data))
{
//do stuff
}
Run Code Online (Sandbox Code Playgroud)
但是,这种方法的问题是,如果有也不会返回true ?,?,ž...我知道那是因为[a-zA-Z]不"看"这个字.所以,我的问题是如何编写一个将使用克罗地亚字符返回true的正则表达式.如果可以做到这一点,也可以随意发表评论,因为我想听听你的建议.顺便说一句,我是在regex101.com的帮助下完成的
该\p{L}速记类和u选项,则可以匹配Unicode字母.
该程序返回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>";
}
Run Code Online (Sandbox Code Playgroud)
您可以匹配属于"字母"类别的单个字符
\p{L}.
您应该指定
/u为使用正则表达式\x{FFFF},\X或\p{L}匹配Unicode字符,字形,属性或脚本.PHP将解释'/regex/u'为UTF-8字符串而不是ASCII字符串.
另外,请参阅preg_match函数文档页面中的一个示例:
对于那些使用
preg_match此处搜索unicode正则表达式示例的人 来说:检查波斯数字
preg_match( "/[^\x{06F0}-\x{06F9}\x]+/u" , '??????????' );