【问题标题】:Replacing an exact string in PHP在 PHP 中替换一个确切的字符串
【发布时间】:2013-08-21 16:03:01
【问题描述】:

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

$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 替换,但我不确定该怎么做。

谁能帮忙?

【问题讨论】:

    标签: php preg-replace str-replace


    【解决方案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
    

    【讨论】:

    • 我刚刚测试了代码,它似乎已经解决了我的问题!非常感谢!
    【解决方案2】:

    一种解决方案可能是:

    preg_replace("/,XL(\,|$)/", ",XL (Out of Stock),", $String);
    

    【讨论】:

    • 感谢您的回复。
    【解决方案3】:

    虽然 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”值。

    【讨论】:

    • 感谢您的回复。
    【解决方案4】:

    我会使用负前瞻:

    $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)
    

    【讨论】:

    • 感谢您的回复。
    猜你喜欢
    • 2015-06-06
    • 1970-01-01
    • 2013-08-07
    • 1970-01-01
    • 1970-01-01
    • 2014-12-11
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    相关资源
    最近更新 更多