我正在尝试确定给定的字符串是否包含超过4个连续的阿拉伯语(印地语)数字。具体而言,阿拉伯语(印地语)数字是:
١ ٢ ٣ ٤ ٥ ٦ ٧ ٨ ٩
是unicode 661到669
我试过了:
if (preg_match("/\b(?:(?:١|٢|٣|٤|٥|٦|٧|٨|٩)\b\s*?){4}/", $str, $matches) > 0)
return true;
但它根本不起作用(总是返回false)。
答案 0 :(得分:5)
您可以尝试以下正则表达式。 \p{N}
匹配任何脚本中的任何数字字符。
preg_match('~(?:\p{N}\s?){4,}~u', $str, $matches)
如果您只想匹配specific characters,请改用以下内容。
preg_match('~(?:[\x{0660}-\x{0669}]\s?){4,}~u, $str, $matches)
答案 1 :(得分:2)
使用字符类并量化它。看到这个正则表达式:
/[١٢٣٤٥٦٧٨٩]{4,}/
您的字符不是单词字符,因此\b
会在匹配前面/后面声明一个单词字符,将其删除。
这是regex demo。
请注意,如果您匹配的超过 4个字符,请改用{5,}
。