Подтвердить что ты не робот

Понимание регулярных выражений

Я устал от страха от регулярных выражений. Тема этой публикации ограничивается реализацией регулярных выражений PHP, однако любые общие рекомендации по регулярному выражению, очевидно, будут оценены (т.е. Не путать меня с областью действия, которая не применима к PHP).

Следующие (я считаю) удаляет пробелы между числами. Может быть, есть лучший способ сделать это, но я все еще хочу понять, что происходит.

$pat="/\b(\d+)\s+(?=\d+\b)/";
$sub="123 345";
$string=preg_replace($pat, "$1", $sub);

Просматривая шаблон, моя интерпретация:

  • \b Граница слов
  • \d+ Подшаблон 1 или более цифр
  • \s+ Одно или несколько пробелов
  • (?=\d+\b) Утверждение Lookahead одной или нескольких цифр, за которой следует граница слова?
  • Составляя все это вместе, ищем любую границу слова, за которой следует одна или несколько цифр, а затем некоторые пробелы, а затем выполняйте какое-то выражение на ней и сохраняете результаты в $1, чтобы он мог заменить шаблон?

Вопросы:

  • Правильно ли это моя интерпретация?
  • Что это заглавное утверждение?
  • Какова цель ведущего / и конечного /?
4b9b3361

Ответ 1

Является ли моя интерпретация правильной?

Да, ваша интерпретация верна.

Что это такое утверждение?

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

Так что в основном, используя regex abcd(?=e) для соответствия строке abcde, вы получите соответствие: abcd.

Причина, по которой это соответствует, состоит в том, что строка abcde действительно содержит:

  • An a
  • Далее следуют b
  • Далее следует c
  • Далее следует d that has an e after it (это один символ!)

Важно отметить, что после 4-го элемента он также содержит фактический символ "e", который мы не сопоставляем.

С другой стороны, попытка сопоставления строки с регулярным выражением abcd(?=f) завершится неудачно, так как последовательность:

"a", followed by "b", followed by "c", followed by "d that has an f in front of it"

не найден.

Какова цель ведущего/и конечного /

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

Ответ 2

Было бы неплохо посмотреть это видео, и 4, которые следуют этому: http://blog.themeforest.net/screencasts/regular-expressions-for-dummies/ Остальная часть серии находится здесь: http://blog.themeforest.net/?s=regex+for+dummies

Коллега отправил мне серию и после просмотра их всех мне было намного удобнее использовать регулярные выражения.

Еще одна хорошая идея - установить RegexBuddy или Regexr. Особенно RegexBuddy очень полезен для понимания работы регулярного выражения.