PHP Regex不匹配整个可能的单词

时间:2013-09-02 10:28:36

标签: php regex

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

经过测试的字符串:

 $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 并替换它。

我该如何解决?

1 个答案:

答案 0 :(得分:0)

无需在preg_match之前运行preg_replace。如果模式不匹配,您将返回从preg_replace返回的原始字符串。此外,您的正则表达式也需要简化,请尝试以下代码:

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

我已在\b(字边界)中包含了开始和结束字符串,以避免匹配POLICY

等意外匹配