微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

“preg_match():编译失败:不匹配的括号”在PHP中为有效模式

想知道有没有人可以在 PHP的preg_match函数中使用以下正则表达式失败的原因呢?
<?PHP
$str = '\tmp\PHPDC1C.tmp';

preg_match('|\\tmp\\([A-Za-z0-9]+)|',$str,$matches);

print_r($matches);
?>

这导致错误消息“preg_match():编译失败:不匹配的括号”,尽管该模式似乎是有效的.我已经使用在线PHP Regular Expression tester和Linux工具Kiki进行了测试.看起来像PHP正在转出开头的圆括号而不是反斜杠.

我通过使用str_replace交换反斜杠来解决问题.这适用于我的情况,但是很高兴知道为什么这个正则表达式失败.

要对文字反斜杠进行编码,您需要将其转义为两次:一次为字符串,一次为正则表达式引擎:
preg_match('|\\\\tmp\\\\([A-Za-z0-9]+)|',$matches);

PHP中(使用单引号字符串时),这仅与实际的反斜杠相关;其他正则表达式转义可以使用单个反斜杠:

preg_match('/\bhello\b/',$subject)

这在the manual中有所介绍(请参见页面顶部的“注意:”框).

原文地址:https://www.jb51.cc/php/131208.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐