反直觉的preg_match行为 - 匹配一系列字符的最简洁方法是什么?

时间:2013-09-03 07:31:23

标签: php regex hex preg-match chr

我正在寻找匹配一系列字符的方法,并假设以下regEx只匹配20到7E之间十六进制代码范围内的字符。但是,它也匹配chr(10)(换行),事实上,以下打印“传递”:

echo preg_match("/^[\x20-\x7E]*$/", chr(10)) ? 'passed' : 'failed';

知道为什么以及如何匹配该范围?

1 个答案:

答案 0 :(得分:2)

chr(10)是行尾,所以你应该添加modifier D。

  

如果设置了此修饰符,则模式中的美元元字符仅匹配主题字符串的末尾。如果没有此修饰符,如果它是换行符(但不在任何其他换行符之前),则美元也会在最终字符之前立即匹配。

//                               v
echo preg_match("/^[\x20-\x7E]*$/D", chr(10)) ? 'passed' : 'failed';
//                               ^