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

标签 php regex hex preg-match chr

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

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

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

最佳答案

chr(10) 是行尾,因此您应该添加 modifier D.

If this modifier is set, a dollar metacharacter in the pattern matches only at the end of the subject string. Without this modifier, a dollar also matches immediately before the final character if it is a newline (but not before any other newlines).

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

关于php - 违反直觉的 preg_match 行为 - 匹配一系列字符的最简洁的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18586526/

相关文章:

java - 整数到十六进制字符串 NumberformatException

swift - 如何在 Swift 中生成十六进制序列?

php - PHP 中 exec 命令的 FAST CGI 错误

php - 基于 MVC 基础的动态路由 - i18n 和 l10n

javascript - 为什么正则表达式构造函数需要双重转义?

javascript - 如何从javascript中的字符串中提取参数(指定模式字符串)

c - 自动交互编程

javascript - 文本区域中的单词自动完成(单词建议)

php - 从另一个表中选择服务器名称

regex - 模式匹配 Scala 正则表达式评估