我正在创建脚本,可以删除不需要的字符串部分,但保留其余部分。我有一个奇怪的问题 - 我创建的正则表达式匹配字符串但不是所有可能的符号。
经过测试的字符串:
$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 并替换它。
我该如何解决?
答案 0 :(得分:0)
无需在preg_match
之前运行preg_replace
。如果模式不匹配,您将返回从preg_replace
返回的原始字符串。此外,您的正则表达式也需要简化,请尝试以下代码:
$itemAttributes = preg_replace('@\bPOLI\b.*?\bBLK\b@', '#', $itemFullName);
我已在\b
(字边界)中包含了开始和结束字符串,以避免匹配POLICY