2

我有一个看起来像这样的字符串:

$String = "Size,Please Select,L Kids,XL Kids,S,M,L,XL"

我想将 ',XL' 替换为 ',XL (Out of Stock)' 但是我不希望它也替换 'XL Kids'。

所以我需要一个类似的结果:

$String_replaced ="Size,Please Select,L Kids,XL Kids,S,M,L,XL (Out Of Stock)"

我尝试过使用字符串替换,但这不起作用,我知道我将不得不使用 preg 替换,但我不确定如何做到这一点。

任何人都可以帮忙吗?

4

4 回答 4

1

这个基于环视的正则表达式应该可以工作:

$repl = preg_replace('/(?<=^|,)\bXL\b(?=,|$)/', 'XL (Out of Stock)', $String);

这匹配XL由单词边界包围。

(?<=^|,) - Make sure XL is preceded by comma or at the start of line
(?=,|$) - Make sure XL is followed by comma or at the end of line
于 2013-08-21T16:24:56.407 回答
0

一种解决方案可能是:

preg_replace("/,XL(\,|$)/", ",XL (Out of Stock),", $String);
于 2013-08-21T16:20:38.810 回答
0

我会使用负面的前瞻:

$String = "Size,Please Select,L Kids,XL Kids,S,M,L,XL";
$String_replaced  = preg_replace('/\bXL\b(?! Kids)/', 'XL (Out of Stock)', $String);
echo $String_replaced ,"\n";

输出:

Size,Please Select,L Kids,XL Kids,S,M,L,XL (Out of Stock)
于 2013-08-22T08:35:40.777 回答
0

虽然 preg_replace 是完全可以接受的,但如果这只是“一次性”的事情,一个更快的选择是仍然使用字符串替换:

$string = "Size,Please Select,L Kids,XL Kids,S,M,L,XL";
$newString = str_replace("L,XL","L,XL (Out Of Stock)",$string);
echo $newString;

这将查找所有紧接在 L 前面的“,XL”值。

于 2013-08-21T16:30:41.333 回答