微信公众号制作开发 微信小程序定制开发 网站建设制作 手机app软件开发

您的位置:首页 > 技术观点 > 信息详情

preg_replace(): Compilation failed: unmatched closing parenthesis at offset

来源:山东鸿软信息科技有限公司  阅读量:541  时间:2024-06-15 18:50

这个错误是由于在使用preg_replace函数时,正则表达式中的括号没有正确匹配导致的。正则表达式中的每一个开括号(都必须有对应的闭括号),且它们应当正确嵌套。如果闭括号数量多余开括号,或者开括号没有对应的闭括号,正则引擎就会抛出这个错误。

解决分析:

检查你的正则表达式,确保每一个开括号(都有对应的闭括号)。

确保括号正确嵌套,内层的表达式应当被外层的括号所包含。

如果正则表达式是动态构建的,确保动态构建的逻辑正确无误,不会产生不匹配的括号。

例如,如果你的正则表达式是/this is a (sample/),这将会导致上述错误,因为内部的(并没有对应的)。修正后应该是/this is a (sample)/。


解决方法:
我们使用preg_quote() 函数将正则表达式$pattern部分中待匹配的关键词进行转义,这样关键词中若含有正则特殊字符时,经转义后就不会和正则冲突扰乱了。


举例:将文本中的单词替换为斜体,php代码可如下这样写:

//在这个例子中,preg_quote($word) 用于保持星号原文涵义,使其不使用正则表达式中的特殊语义。

$textbody = "This book is *very* difficult to find.";

$word = "*very*";

$textbody = preg_replace ("/" . preg_quote($word) . "/",

                          "<i>" . $word . "</i>",

                          $textbody);

echo $textbody;

执行结果如下所示:
This book is <i>*very*</i> difficult to find.



preg_quote()知识点:

preg_quote 函数用于转义正则表达式字符。

语法

string preg_quote ( string $str [, string $delimiter = NULL ] )


preg_quote() 需要参数 str 并向其中 每个正则表达式语法中的字符前增加一个反斜线。 这通常用于你有一些运行时字符串 需要作为正则表达式进行匹配的时候。


正则表达式特殊字符有: . \ + * ? [ ^ ] $ ( ) { } = ! < > | : -


参数说明:

$str: 输入字符串。

$delimiter: 如果指定了可选参数 delimiter,它也会被转义。这通常用于 转义 PCRE 函数使用的分隔符。 / 是最通用的分隔符。


返回值

返回转义后的字符串。


再举个例子:

$keywords = '$40 for a g3/400';

$keywords = preg_quote($keywords, '/');

echo $keywords;


执行结果转义了 $ 和 / 特殊字符,如下所示:

返回 \$40 for a g3\/400





成为您更加专业的技术合伙人

网站建设 | APP开发 | 产品服务 | 技术观点 | 关于我们      客服电子邮箱:1828087588@qq.com  客服QQ:1828087588、1421667633  电话:151-6502-2080

Copyright © 2016-2024 山东鸿软信息科技有限公司 版权所有 https://www.greatsoft.cn 鲁ICP备16026454号