Как удалить слово, если оно содержит число в PHP - PullRequest
1 голос
/ 20 марта 2020

Я пытаюсь выяснить, как удалить слово, если оно содержит цифры. Например, у меня есть предложение «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

С моим решением он удаляет только цифры, но не буквы / слова за ним.

Предпочтительно я создаю функцию, чтобы я мог использовать ее несколько раз.

1 Ответ

3 голосов
/ 20 марта 2020

Чтобы удалить слова, состоящие из букв, цифр или символов подчеркивания и содержащие ди git, вы можете использовать

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

Для удаления фрагментов непробельных символов , которые содержат ди git, используйте

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

Если ди git следует смешать с другими символами, которые необходимо удалить, используйте

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. В некоторых случаях вам даже нужно убедиться, что после него нет слова char, тогда вы замените \b на \b(?!\w).

Детали шаблона

  • [^\s\d]* - ноль или более символов, кроме пробелов и цифр
  • \d - di git
  • \S* - 0 или более непробельных символов
  • [^\W\d]*\d\w* - соответствует 0 или более символам, отличным от несловесных и di git символов, затем di git, а затем 0+ word char ("word" char - это буква, di git или _)
  • (?:[^\s\d]+\d|\d+[^\s\d]) - соответствует любой из двух альтернатив:
    • [^\s\d]+\d - 1+ символов, отличных от пробела и di git, а затем ди git
    • | - или
    • \d+[^\s\d] - 1+ цифр, а затем символ, отличный от пробела и ди git
...