Удаление отдельных букв из строки

#php #regex

#php #регулярное выражение

Вопрос:

У меня есть строка типа: Bruce A Johnson

Я хочу, чтобы это было Bruce Johnson .

Как мне удалить одиночную A букву из строки с помощью PHP? (все «слова», состоящие только из 1 символа, должны быть удалены)

Комментарии:

1. all 'words' of only 1 character need to be removed Это не спецификация. Это не определено как фраза и без определения. Это означает что-то только для вас, интерпретатора имени.

Ответ №1:

Что-то вроде этого:

 preg_replace('/bwbs?/', '', $string);
  

Здесь говорится, что удалите любой отдельный символ слова, который имеет границу слова с обеих сторон и, необязательно, завершающий пробел.

Таким образом, b test a test foo c это даст test test foo результат.

Если у вас может быть какая-то завершающая пунктуация (например Bruce A. Johnson ), вы можете избавиться от пунктуации с помощью этого выражения:

 preg_replace('/bwb(s|.s)?/', '', $string);
// 'b test a, test foo c' -> 'test test foo'
  

Комментарии:

1. Отлично работает. Это действительно полезно при создании чистой строки URL для post slug.

2. В дополнение к буквам, это, по-видимому, также удаляет числа. Не уверен, намеренно это или нет.

Ответ №2:

Используйте explode(), чтобы разделить три слова, удалить средний элемент возвращаемого массива, а затем implode(), чтобы воссоединить строку.

Комментарии:

1. Спасибо, но у меня такое чувство, что это нужно сделать с помощью регулярного выражения… Единственная проблема в том, что я не силен в регулярных выражениях 🙂

2. Для этого, конечно, не требуется регулярное выражение @Dylan, поскольку есть несколько способов сделать это. Регулярное выражение может дать наиболее сжатый код, но также может потребовать большего времени выполнения по сравнению с методами без регулярных выражений. Это одни из причин, по которым вы бы предпочли один способ другому.