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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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、查看打印出的日志信息
1 2 3 4 5 6 | [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 的值为 “省/州由” 包含 “/” 所导致。参考:正则表达式特殊字符有: . \ + * ? [ ^ ] $ ( ) { } = ! < > | : – # 。注意 / 不是正则表达式特殊字符。代码调整如下
1 2 3 4 5 | 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
近期评论