#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, поскольку есть несколько способов сделать это. Регулярное выражение может дать наиболее сжатый код, но также может потребовать большего времени выполнения по сравнению с методами без регулярных выражений. Это одни из причин, по которым вы бы предпочли один способ другому.