【问题标题】:How do you remove numbers from a string in PHP?如何从 PHP 中的字符串中删除数字?
【发布时间】:2011-04-26 00:09:14
【问题描述】:
$text = preg_replace('/[^\\/-a-z\s]/i', '', $text);

我有这个表达式,它会删除除破折号、正斜杠和空格之外的所有内容。但是,无论我移动什么,它总是留下数字。 有什么想法吗?

$text = "FLAMBOYANT#_45/ADJ" = 结果 = FLAMBOYANT45/ADJ

【问题讨论】:

  • 定义你想要的东西会更容易。
  • 我需要除字母、正斜杠、破折号和空格之外的所有内容。这个表达式应该这样做 - 除了数字仍然存在。

标签: php regex text preg-replace


【解决方案1】:

转义你想在你的正则表达式中匹配的-。正则表达式的字符类部分中的第一个连字符 - 具有特殊含义。它将生成从/a 的范围(我认为)。要修改,请尝试:

$text = preg_replace('/[^\\/\-a-z\s]/i', '', $text);

【讨论】:

    【解决方案2】:

    这行得通

    $text = preg_replace('#[^\\/\-a-z\s]#i', '', $text);
    

    【讨论】:

      【解决方案3】:

      我的 PHP-Fu 不是那么强大,但我怀疑 /-a-z 被解释为从 /z 的字符范围(请注意,数字紧跟在 ASCII 中的斜杠之后)所以也许你想要这个:

      $text = preg_replace('/[^\\/\-a-z\s]/i', '', $text);
      

      我只是添加了一个反斜杠来转义正则表达式字符类中“-”的(有时)特殊含义。

      【讨论】:

      • 效果惊人。我不知道破折号是一个元字符。我有这个元字符正则表达式列表。 .^*+?{{}\|()} 也不在此列表中的是正斜杠。
      • @user723220:连字符仅在诸如[a-z]之类的字符类中是特殊的,用于表示字符范围。但是,如果连字符位于字符类的开头或结尾,[-a][z-],那么它只是一个文字连字符。斜线在 inside 正则表达式中并不特殊,但它通常用于 delimit 正则表达式(例如/pancake/),一些正则表达式引擎允许您使用不同的分隔符(例如这个 Perl:$x =~ m!^http://!) 以避免像/\\\// 这样的难以理解的“牙签”。
      【解决方案4】:

      <?php
        $text = "FLAM-BOYANT#_45/ADJ";
        $allowed = "/[^a-z\\040\\.\\-\/]/i";
        $text=  preg_replace($allowed,"",$text);
        echo $text; //FLAM-BOYANT/ADJ
      ?>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-11
        • 2012-05-30
        • 1970-01-01
        • 1970-01-01
        • 2011-06-26
        • 1970-01-01
        • 1970-01-01
        • 2011-05-06
        相关资源
        最近更新 更多