Регулярное выражение удаляет первый символ из трех или меньших символьных слов в строке

#php #regex

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

Вопрос:

У меня есть строки типа a string of words with different lengths

Я хочу использовать preg_replace php для удаления только из слов длиной 1-3 символа, включая . Требуемый вывод a string of words with different lengths

Ответ №1:

Без захвата групп,

 (?<= |^) (?=w{1,3}b)
  

ДЕМОНСТРАЦИЯ

Ваш окончательный PHP-код будет,

 <?php
$string = ' a  string  of  words  with  different  lengths';
$pattern = "~(?<= |^) (?=w{1,3}b)~";
$replacement = "";
echo preg_replace($pattern, $replacement, $string);
?>
  

Вывод:

 a  string of  words  with  different  lengths
  

Объяснение:

 (?<= |^) (?=w{1,3}b)
  
  • (?<= |^) Положительный взгляд назад, чтобы искать только после начальной точки или пробела.
  • Буквальный знак
  • (?=w{1,3}b) Символы, следующие за знаком, должны быть (от 1 до 3) символами слова, за которыми снова следует граничный символ.

Ответ №2:

Используйте это:

 $replaced = preg_replace('~ (?=w{1,2}b)~', '', $yourstring);
  

Объяснение

  • сопоставьте литерал
  • Предварительный просмотр (?=w{1,2}b) утверждает, что далее следуют один или два символа слова, а затем граница слова
  • Замените пустой строкой

{1,2} Это потому, что вы хотите настроить таргетинг на строки максимум из 3 символов, включая

Ответ №3:

удаляет только из слов длиной 1-3 символа, включая

Попробуйте приведенное ниже регулярное выражение с использованием групп захвата и замените на $1

  (bw{1,2}b)
  

Вот демонстрация regex101

Описание:

 b          assert position at a word boundary 
w{1,2}     match any word character [a-zA-Z0-9_] between 1 and 2 times
  

Шаблон ищет знак , за которым следует слово длиной в 1 или 2 символа.

Примечание: Если вы ищете только буквы, тогда используйте [a-z] вместо w .


Пример кода:

 $re = "/ (bw{1,2}b)/";
$str = " a  ab  string  of  words  with  different  lengths";
$subst = '$1';

$result = preg_replace($re, $subst, $str);
  

вывод:

 a ab  string of  words  with  different  lengths