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