2

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

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

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

4

1 回答 1

2

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

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

//                               v
echo preg_match("/^[\x20-\x7E]*$/D", chr(10)) ? 'passed' : 'failed';
//                               ^
于 2013-09-03T07:43:18.760 回答