local.ERROR preg_replace() Unknown modifier ‘�’ {exception[object] (ErrorException(code 0) preg_replace() Unknown modifier ‘�’
1、报错:[2024-09-28 02:59:09] local.ERROR: preg_replace(): Unknown modifier ‘�’ {“exception”:”[object] (ErrorException(code: 0): preg_replace(): Unknown modifier ‘�’ at )
[stacktrace]。如图1
foreach ($otherPatterns as $otherPattern) { if ($originalDescription == $description) { Log::info( '$description2 0 订单客户信息', [ '$description' => $description, '$startPattern' => $startPattern, '$pattern' => $pattern, '$otherPattern' => $otherPattern, $this->action_id ] ); $description = preg_replace('/(' . preg_quote($startPattern) . ')[\s\S]*' . preg_quote($pattern) . '[\s\S]*(,' . preg_quote($otherPattern) . ')/', '$1***' . $pattern . '***,' . $otherPattern, $description); } }
3、查看打印出的日志信息
[2024-09-28 03:18:50] local.INFO: [module/order]:$description2 0 订单客户信息 {"$description":"邮寄地址由邮寄地址200变更为邮寄地址2005","$startPattern":"客户姓名由","$pattern":"变更为","$otherPattern":"联系邮箱由","0":2} [2024-09-28 03:18:50] local.INFO: [module/order]:$description2 0 订单客户信息 {"$description":"邮寄地址由邮寄地址200变更为邮寄地址2005","$startPattern":"客户姓名由","$pattern":"变更为","$otherPattern":"联系电话由","0":2} [2024-09-28 03:18:50] local.INFO: [module/order]:$description2 0 订单客户信息 {"$description":"邮寄地址由邮寄地址200变更为邮寄地址2005","$startPattern":"客户姓名由","$pattern":"变更为","$otherPattern":"所属国家由","0":2} [2024-09-28 03:18:50] local.INFO: [module/order]:$description2 0 订单客户信息 {"$description":"邮寄地址由邮寄地址200变更为邮寄地址2005","$startPattern":"客户姓名由","$pattern":"变更为","$otherPattern":"省/州由","0":2} [2024-09-28 03:18:50] local.ERROR: preg_replace(): Unknown modifier '�' {"exception":"[object] (ErrorException(code: 0): preg_replace(): Unknown modifier '�' at E:\\object\\Modules\\Order\\Transformers\\OrderLogResource.php:910) [stacktrace]
4、初步得出原因,变量 $otherPattern 的值为 “省/州由” 包含 “/” 所导致。参考:正则表达式特殊字符有: . \ + * ? [ ^ ] $ ( ) { } = ! < > | : – # 。注意 / 不是正则表达式特殊字符。代码调整如下
foreach ($otherPatterns as $otherPattern) { if ($originalDescription == $description) { $description = preg_replace('/(' . preg_quote($startPattern, '/') . ')[\s\S]*' . $pattern . '[\s\S]*(,' . preg_quote($otherPattern, '/') . ')/', '$1***' . $pattern . '***,' . $otherPattern, $description); } }
5、不再报错,替换后的格式为:邮寄地址由***变更为***。符合预期。如图2
近期评论