#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)
Символы, следующие за
Ответ №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