如何删除包含 PHP 中的数字的单词

How to remove a word if it contains a number in PHP

我想知道如何删除包含数字的单词。例如我有句子"Lorum ipsum: 7-Dt Dolor Sit, Amet 8-AM. Consectetur adipiscing"。我要删除的是“7-Dt”和“8-AM”

我试过:

$str = 'Lorum ipsum: 7-Dt Dolor Sit, Amet 8-AM. Consectetur adipiscing';
$arr = preg_replace("/[^a-zA-Z\']/"," ",$str);                                                                   
echo($arr);
// Outputs: Lorum ipsum Dt Dolor Sit Amet AM Consectetur adipiscing

在我的解决方案中,它只删除了数字,但没有删除它后面的 letters/words。

我最好创建一个函数,这样我就可以多次使用它。

要删除 由字母、数字或下划线组成的单词,并且包含您可以使用的数字

preg_replace("/[^\W\d]*\d\w*/", " ",$str)

要删除包含数字的非空白字符块,请使用

preg_replace("/[^\s\d]*\d\S*/", " ",$str)

如果数字与您需要删除的其他字符混合,请使用

preg_replace("/(?:[^\W\d]+\d|\d+[^\W\d])\w*/", " ",$str) 
preg_replace("/(?:[^\s\d]+\d|\d+[^\s\d])\S*/", " ",$str)

在你的具体案例中,因为你也想保留尾随标点符号,你可以使用

preg_replace("/(?:[^\s\d]+\d|\d+[^\s\d])\S*\b/", " ",$str)

参见PHP demo\b 字边界将要求与\S* 匹配的最后一个字符是一个字字符。在某些情况下,您甚至需要确保其后没有单词 char,然后将 \b 替换为 \b(?!\w).

图案详情

  • [^\s\d]* - 除空格和数字以外的零个或多个字符
  • \d - 一个数字
  • \S* - 0 个或多个非空白字符
  • [^\W\d]*\d\w* - 匹配除非单词和数字字符以外的 0 个或多个字符,然后是数字,然后是 0+ 个单词字符("word" 字符是字母、数字或 _)
  • (?:[^\s\d]+\d|\d+[^\s\d]) - 匹配以下两种选择之一:
    • [^\s\d]+\d - 除了空格和数字外的 1+ 个字符,然后是数字
    • | - 或
    • \d+[^\s\d] - 1+ 个数字,然后是除空格和数字以外的字符