我正在寻找匹配一系列字符的方法,并假设以下正则表达式仅匹配 20 到 7E 之间的十六进制代码范围内的字符。但是,它也匹配chr(10)
(换行),实际上,以下打印“通过”:
echo preg_match("/^[\x20-\x7E]*$/", chr(10)) ? 'passed' : 'failed';
知道为什么以及如何匹配该范围吗?
我正在寻找匹配一系列字符的方法,并假设以下正则表达式仅匹配 20 到 7E 之间的十六进制代码范围内的字符。但是,它也匹配chr(10)
(换行),实际上,以下打印“通过”:
echo preg_match("/^[\x20-\x7E]*$/", chr(10)) ? 'passed' : 'failed';
知道为什么以及如何匹配该范围吗?
chr(10) 是行尾,所以你应该添加修饰符D。
如果设置了此修饰符,则模式中的美元元字符仅匹配主题字符串的末尾。如果没有这个修饰符,如果美元是换行符,它也会在最后一个字符之前立即匹配(但不在任何其他换行符之前)。
// v
echo preg_match("/^[\x20-\x7E]*$/D", chr(10)) ? 'passed' : 'failed';
// ^