【问题标题】:Replacing a string of text with another string using preg_replace使用 preg_replace 将一个文本字符串替换为另一个字符串
【发布时间】:2009-07-31 15:19:41
【问题描述】:

我有一个字符串 Action - [N]ew, [U]pdate, or [D]elete : N 我需要用“Action - [N]ew, [U] pdate 或 [D]elete : U" somhow 通过使用 preg_replace 我无法让它工作。它保持不变。

我的代码是这样的

$action = Action - '[N]ew, [U]pdate, or [D]elete : U';
$line = preg_replace("/(Action - [N]ew, [U]pdate, or [D]elete : N)/",$action,$line);

【问题讨论】:

    标签: php regex preg-replace


    【解决方案1】:

    [] 是正则表达式中的特殊字符。如果你想匹配它们,你必须逃避它们:

    "/(Action - \[N\]ew, \[U\]pdate, or \[D\]elete : N)/"
    

    没有被转义,[] 中的表达式将匹配其中的每个字符之一。所以在你原来的情况下,"[N]ew" 匹配"New"。如果它是"[NP]ew",它将匹配"New""Pew"

    【讨论】:

    • Thx,这实际上很简单,我必须知道,一天编码太多;-)
    【解决方案2】:

    您不需要 preg_replace 来执行此操作。一个简单的str_replace 就足够了:

    $action = 'Action - [N]ew, [U]pdate, or [D]elete : U';
    $line = str_replace('Action - [N]ew, [U]pdate, or [D]elete : N', $action, $line);
    

    【讨论】:

    • +1 以获得更简单的替代解决方案。如果他的例子只是一个简化,我会保留我的答案。
    【解决方案3】:

    几个问题:

    1) 第一行有语法错误。你的报价放错了地方。应该是:

     $action = "Action - [N]ew, [U]pdate, or [D]elete : N";
    

    2) 您需要转义正则表达式中的方括号([])。或者,您可以这样做:

     $line = preg_replace("/N$/", "U", $action);
    

    把它们结合起来:

     $action = "Action - [N]ew, [U]pdate, or [D]elete : N";
     $line = preg_replace("/N$/", "U", $action);
    

    【讨论】:

      【解决方案4】:

      尝试转义 '[' 和 ']'

      【讨论】:

        猜你喜欢
        • 2011-12-21
        • 1970-01-01
        • 2013-12-03
        • 2019-05-14
        • 1970-01-01
        • 2012-07-16
        • 2012-10-24
        • 2011-04-06
        相关资源
        最近更新 更多