【问题标题】:Delete numbers and punctuation with preg_replace PHP使用 preg_replace PHP 删除数字和标点符号
【发布时间】:2017-11-15 21:37:02
【问题描述】:

我想在 PHP 中删除字符串的数字和标点符号(句号、逗号等),例如我尝试过这个

<?php
 $str = "Hello, lorem ipsum, dolor sit amet. Adipiscing90 elit. 1234567890. ";
 $text = preg_replace('/\d+/u', '', $str);
 echo $text;
?>

这只会删除数字但没有标点符号导致:

你好,lorem ipsum,dolor sit amet。 Adipiscing 精英。 .

我想要这样,没有逗号、句号等:

你好 lorem ipsum dolor sit amet Adipiscing elit

如何修改 preg_replace 函数?

我需要一些帮助。

【问题讨论】:

  • 试试模式/[^\w\s]|\d/
  • 所以只保留字母和空格? regex101.com/r/DeRxeD/2
  • /[[:punct:]]|\d/ 匹配标点和数字
  • @miknik 您不需要更改,只需将\d 也放入字符类中。 [[:punct:]\d]+.
  • @GrumpyCrouton 效果很好!谢谢!

标签: php regex preg-replace


【解决方案1】:

[:punct:]POSIX 字符类和\p{P}Unicode 属性/类别类来匹配标点符号,但请注意它们不相等。 [:punct:] 也可以匹配所有符号,其实[:punct:] = [\p{P}\p{S}]

因此,根据您的要求,使用

preg_replace('/[\d\p{P}]+/u', '', $str)

preg_replace('/[\d[:punct:]]+/u', '', $str)

您可以在FileFormat.info查看每个类别的字符。

【讨论】:

    【解决方案2】:
    preg_replace('/[\d\p{P}]/', '', $str)
    

    输出是“Hello lorem ipsum dolor sit amet Adipiscing elit”

    【讨论】:

      猜你喜欢
      • 2017-05-10
      • 1970-01-01
      • 2011-10-26
      • 1970-01-01
      • 2019-10-29
      • 2023-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多