为什么这个 preg_replace 调用返回 NULL?

2023-12-01

为什么这个调用返回NULL? 正则表达式错误吗?随着test输入它不返回NULL。 文档说 NULL 表示错误,但它可能是什么错误?

$s = hex2bin('5b5d202073205b0d0a0d0a0d0a0d0a20202020202020203a');
// $s = 'test';
$s = preg_replace('/\[\](\s|.)*\]/s', '', $s);
var_dump($s);

// PHP 7.2.10-1+0~20181001133118.7+stretch~1.gbpb6e829 (cli) (built: Oct  1 2018 13:31:18) ( NTS )

你的正则表达式导致灾难性的回溯并导致 PHP 正则表达式引擎失败。您可以使用preg_last_error()功能检查这个。

$r = preg_replace("/\[\](\s|.)*\]/s", "", $s);
if (preg_last_error() == PREG_BACKTRACK_LIMIT_ERROR) {
    print 'Backtrack limit was exhausted!';
}

Output:

Backtrack limit was exhausted!

你正在得到NULL返回值来自preg_replace由于这个错误。按照PHP 文档preg_replace:

如果找到匹配,则将返回新主题,否则将原样返回主题或如果发生错误则为 NULL.


Fix:你不需要(\s|.)使用时s修饰符(DOTALL)。因为点在使用时匹配任何字符,包括换行符s修饰符。

你应该只使用这个正则表达式:

$r = preg_replace('/\[\].*?\]/s', "", $s);
echo preg_last_error();
//=> 0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么这个 preg_replace 调用返回 NULL? 的相关文章

随机推荐

  • 使用回收器视图播放 YouTube 视频

    我正在尝试从数据库获取 youtube id 来播放视频 然后在我的布局中使用 recyclerview 我想将其显示在我的设备上 我通过使用字符串数组来完成此操作 我只想在回收视图中播放 youtube 的视频 但我不断收到错误 java
  • TailwindCSS - 有没有办法不多次写入相同的前缀?例如“悬停:”

    问题 class hover bg blue 400 hover translate y 2 hover translate x 2 hover scale 110 hover shadow 2xl hover shadow blue 40
  • 如何从 URL 中删除 /umbraco/surface/?

    我的 Umbraco 网址有 umbraco surface 在他们中 例如 http localhost 50656 umbraco Surface HealthInsurance Application Pid 26665 Lid 73
  • 添加时出现有趣的(四舍五入?)错误

    一列包含数字 始终保留 2 位小数 有些是计算得出的 但所有乘法和除法四舍五入到 2 位小数 另一列是累积的 累积列有公式
  • 在主页上显示类别及其产品,Magento 1.9

    我想在主页上显示一个类别及其产品 Magento 内置了在主页上显示新产品的选项 但我不知道如何在主页上显示不同的类别 例如我创建了一个类别 我想在主页上显示该类别中的产品 如下所示 特色产品 产品1 产品2 产品3 我已经尝试过下面的代码
  • 如何更改 perf_event_open 最大采样率

    我正在使用 perf event open 来获取样本 我试图让每个人都切中要害 但 perf event open 不够快 我尝试使用以下命令更改采样率 echo 10000000 gt proc sys kernel perf even
  • 权限被拒绝(公钥)。致命:无法从远程存储库读取

    我的中有以下内容 git config 1 core 2 repositoryformatversion 0 3 filemode true 4 bare false 5 logallrefupdates true 6 remote ori
  • Java 8 在分组时不保持顺序

    我正在使用 Java 8 按数据分组 但获得的结果并不是按顺序形成的 Map
  • 将 NSUInteger 添加到 NSMutableArray

    您好 我正在开发一个项目 我正在尝试将 NSUInteger 添加到 NSMutableArray 中 总的来说 我对 Objective C 和 C 都很陌生 当我运行应用程序时 NSLog 显示 null 我将不胜感激任何人能够提供的任
  • 滑动切换下一个元素

    我想要 5 个 p 单击时显示的标签 p div 那是在下面 我可以在我命名每个的地方做到这一点 p 和每个 p div 不同 但这会导致很多 jQuery 所以 目前我有 p class flip Example p div class
  • 如何从应用程序对 Xcode 项目进行逆向工程?

    Xcode 删除了我的项目 一切都消失了 我唯一拥有的是 iPhone 6 中的应用程序 那么有什么方法可以检索应用程序的 Xcode 项目呢 Update 我找到了所有文件 现在我只需要在新项目中重新组装它们 但我不知道怎么办 让我们明确
  • C# 线程暂停和恢复

    我有多个线程 如何暂停 恢复它们 来自重复的问题 我如何暂停 5 个线程 并记住它们的状态 因为其中一个在吃 另一个在思考 等等 如果您正在使用System Threading Thread 然后你可以打电话Suspend and Resu
  • Python 并行迭代列表?

    我创建了一个列表 其中包含不超过 8 个项目 现在我使用标准 for 循环 for item in list 循环该项目 我想知道是否有一种方法可以准确检查所有元素同时 我看过一些关于使用 zip 同时迭代 2 个列表的帖子 这可能会有所帮
  • 在 JavaScript 中高效解析电子邮件正文

    我需要解析多个电子邮件正文 如下所示 Name Bob smith Email email protected Phone Number 4243331212 作为较大程序的一部分 我有以下函数来解析页面 function parseBod
  • ScrollView 中的可缩放 TextView

    我想做一个TextView可以根据捏缩放来更改文本的大小 这TextView是在一个里面ScrollView 我有TextView捏合时缩放 但仅当您几乎完全水平地移动手指时 如果捏缩放有垂直组件 则默认为滚动而不是缩放 有没有办法禁用滚动
  • 如何将QPushButton插入TableView?

    我正在实施QAbstractTableModel我想插入一个QPushButton在每行的最后一列 当用户单击此按钮时 将显示一个新窗口 其中包含有关此行 的更多信息 您知道如何插入按钮吗 我了解委托系统 但所有示例都只是关于 如何使用组合
  • 在 r 中收集多列数据

    我有一些数据 我正在尝试使用 tidy R 和 R 中更长的函数来获取输出 如下所述 但我无法做到这一点 我正在获取数据 我有这种格式的数据 还有许多其他列名称 Country State Year 1 Population 1 Year
  • 如何将cucumber集成到testNG中?

    我有一个用于由核心 JAVA TestNG 创建的框架 该框架遵循TDD模型 POM是我们的构建管理工具 有人可以告诉我是否有可能使用 Cucumber 将框架从 TDD 更新为 BDD 但我仍然想对这个要求做最小的改变 比如不改变任何现有
  • 尝试在 DF 的切片副本上设置值

    我正在用 pandas 和 python 做一些事情 我有下一个代码 df pd read csv Request csv keep default na False df1 df loc df Request Status Closed
  • 为什么这个 preg_replace 调用返回 NULL?

    为什么这个调用返回NULL 正则表达式错误吗 随着test输入它不返回NULL 文档说 NULL 表示错误 但它可能是什么错误 s hex2bin 5b5d202073205b0d0a0d0a0d0a0d0a2020202020202020