Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php limit正则表达式与括号匹配不';行不通_Php_Regex - Fatal编程技术网

php limit正则表达式与括号匹配不';行不通

php limit正则表达式与括号匹配不';行不通,php,regex,Php,Regex,尝试上面的代码时,函数对大于64的字符串返回true。 这里怎么了 return preg_match('/^([\d\p{Hebrew}]*\p{Hebrew}[\d\p{Hebrew}]*){1,64}$/iu', $str); 它仅在找到字符串时返回,您必须填写第三个参数($matches)并返回它。我不确定您的表达式有什么问题(我可以用ascii字符重现),但这是可行的 preg_match('/^([\d\p{Hebrew}]*\p{Hebrew}[\d\p{Hebrew}]*){1

尝试上面的代码时,函数对大于64的字符串返回true。 这里怎么了

return preg_match('/^([\d\p{Hebrew}]*\p{Hebrew}[\d\p{Hebrew}]*){1,64}$/iu', $str);

它仅在找到字符串时返回,您必须填写第三个参数(
$matches
)并返回它。

我不确定您的表达式有什么问题(我可以用ascii字符重现),但这是可行的

preg_match('/^([\d\p{Hebrew}]*\p{Hebrew}[\d\p{Hebrew}]*){1,64}$/iu', $str, $matches);
return $matches;
移除末端长度的检查

在开头添加
(?=.{1,64}$)
。这是一个积极的前瞻,只检查整个字符串是否在1到64个字符之间。如果是,则检查模式,如果不是,则结果为
False


在()中使用*表示字符串可以大于64。。{1,64}量词引用圆括号中的整个表达式,它不必是1个字符。这个正则表达式试图找到什么?一个字符串,在希伯来语中至少有一个字符,前面有数字,后面有数字。基本上混合了希伯来语和数字为什么不在检查strlen($str)<64之后用preg_匹配数字/希伯来语?(或者也许是穆·斯特伦)那不是OP想要的。@stema:不,他不会。你会看到他的反应
 /^(?=.{1,64}$)([\d\p{Hebrew}]*\p{Hebrew}[\d\p{Hebrew}]*)$/