0

我正在创建脚本,该脚本会剪切不需要的字符串部分,但保留其余部分。我有一个奇怪的问题 - 我创建的正则表达式匹配字符串,但不是所有可能的符号。

测试字符串:

 $itemFullName = "10-16X4 POLI MG SELF START BLK PLASTIC";

“模式”我有:

POLI MG FT SDS BLK ZC

PHP代码:

if(preg_match("@(POLI){1}(.)+(BLK)@", $itemFullName))
{
    $itemAttributes = preg_replace("@(POLI){1}(.)+(BLK)@", "#", $itemFullName);
}

最后 $itemAttributes 设置为:

 "10-16X4 #K PLASTIC". 

看起来正则表达式仅捕获 [POLI MG SELF START BL]K 部分并将其更改为“#”而不是整个匹配POLI MG SELF START BLK并替换它。

我该如何解决?

4

1 回答 1

0

preg_match之前没有必要跑preg_replace。如果模式不匹配,您将返回从preg_replace. 您的正则表达式也需要简化,请尝试以下代码:

$itemAttributes = preg_replace('@\bPOLI\b.*?\bBLK\b@', '#', $itemFullName);

我已经将开始和结束字符串包装在\b(单词边界)中,以避免匹配意外匹配,例如POLICY

于 2013-09-02T11:01:29.733 回答