Php 搜索字符串中重复的阿拉伯(印地语)数字

Php 搜索字符串中重复的阿拉伯(印地语)数字,php,regex,unicode,arabic,Php,Regex,Unicode,Arabic,我试图确定给定字符串是否包含超过4个连续的阿拉伯(印地语)数字。具体而言,阿拉伯(印地语)数字为: ١ ٢ ٣ ٤ ٥ ٦ ٧ ٨ ٩ 哪些是unicode 661到669 我试过: if (preg_match("/\b(?:(?:١|٢|٣|٤|٥|٦|٧|٨|٩)\b\s*?){4}/", $str, $matches) > 0) return true; 但它根本不起作用(总是返回false)。使用字符类并对其进行量化。请参阅此正则表达式: /[١٢٣٤٥٦

我试图确定给定字符串是否包含超过4个连续的阿拉伯(印地语)数字。具体而言,阿拉伯(印地语)数字为:

١ ٢ ٣ ٤  ٥ ٦ ٧ ٨ ٩
哪些是unicode 661到669

我试过:

if (preg_match("/\b(?:(?:١|٢|٣|٤|٥|٦|٧|٨|٩)\b\s*?){4}/", $str, $matches) > 0) 
        return true;

但它根本不起作用(总是返回false)。

使用字符类并对其进行量化。请参阅此正则表达式:

/[١٢٣٤٥٦٧٨٩]{4,}/
您的字符不是单词字符,因此
\b
会在匹配的前面/后面声明一个单词字符,请将其删除

这是一本书


请注意,如果匹配的字符超过4个,请使用
{5,}

使用字符类并对其进行量化。请参阅此正则表达式:

/[١٢٣٤٥٦٧٨٩]{4,}/
您的字符不是单词字符,因此
\b
会在匹配的前面/后面声明一个单词字符,请将其删除

这是一本书


请注意,如果匹配的字符超过4个,请改用
{5,}

您可以尝试以下正则表达式<代码>\p{N}匹配任何脚本中的任何类型的数字字符

preg_match('~(?:\p{N}\s?){4,}~u', $str, $matches)
如果您只想匹配这些,您可以使用以下选项

preg_match('~(?:[\x{0660}-\x{0669}]\s?){4,}~u, $str, $matches)

您可以尝试以下正则表达式<代码>\p{N}匹配任何脚本中的任何类型的数字字符

preg_match('~(?:\p{N}\s?){4,}~u', $str, $matches)
如果您只想匹配这些,您可以使用以下选项

preg_match('~(?:[\x{0660}-\x{0669}]\s?){4,}~u, $str, $matches)

是否可以让它匹配除零之外的所有内容(在所有语言中也是如此)?您可以使用负前瞻,将每种语言中的零添加到字符类中<代码>(?![0०೦൦௦౦٠]\p{N}我的意思是我希望它跳过0的匹配-只匹配1..9。我将尝试使用负前瞻。是否可以让它匹配除零之外的所有内容(在所有语言中也是如此)?您可以使用负前瞻,在每种语言中将零添加到字符类中<代码>(?![0०೦൦௦౦٠]\p{N}我的意思是我希望它跳过0的匹配-只匹配1..9。我将尝试使用负前瞻。这在regex演示中可以很好地工作,但是在preg_match中使用它不能正常工作。“Omar£٣٣”返回一个正匹配。这在regex演示中运行良好,但在preg_match中使用它无法正常工作。“Omar£٣٣”返回正匹配。