Понимание регулярных выражений
Я устал от страха от регулярных выражений. Тема этой публикации ограничивается реализацией регулярных выражений 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, чтобы он мог заменить шаблон?
Вопросы:
- Правильно ли это моя интерпретация?
- Что это заглавное утверждение?
- Какова цель ведущего
/
и конечного /
?
Ответы
Ответ 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 очень полезен для понимания работы регулярного выражения.