Crucial идеи, стоящие за Расширенный регулярных выражений

Регулярные выражения (или регулярное выражение) являются мощным способом для прохода больших строк для того, чтобы найти информацию.

Они опираются на основные закономерности в структуре струны творят чудеса.К сожалению, простых регулярных выражений не в состоянии справиться со сложными узорами и символами.Чтобы справиться с этой дилеммой, вы можете использовать расширенный регулярные expressions.

Ниже мы приведем Знакомство с расширенными регулярными expressions, с восьми часто используемых понятий и примеров.Каждый пример описывает простой способ, чтобы соответствовать модели в сложных строк.Если у вас нет опыта работы с основными регулярными выражениями, взгляните на этом article приступить к работе.Синтаксис, используемый здесь соответствует PHP’ с Perl-совместимых регулярных expressions.

1.Greediness/Laziness

Greed

Все операторы регулярных выражений являются повторением greedy.Они стараются, чтобы соответствовать как можно больше в строку.К сожалению, это не всегда может быть желаемого эффекта.Таким образом, ленивые операторы используются для решения этой проблемы.Они только соответствует наименьшим возможным узор и используются, добавив ‘? ’ После соответствующего жадных операторов.Кроме того, ‘ U’ модификатор может быть использован, чтобы сделать все repetiton операторов ленивый.Дифференциация между жадностью и ленью является ключом к пониманию полностью передовых регулярные expressions.

Жадный Operators

* Оператор соответствует предыдущим выражением 0 или более раз.Это жадный оператора.Рассмотрим следующее выражение:

preg_match( '/<h1>.*<\/h1>/', '<h1>This is a heading.</h1>
<h1>This is another one.</h1>', $matches );

Напомним, что.означает любой символ, кроме новой строки.Выше регулярное выражение ищет теги h1 и все его содержимое.Он использует.и * операторы постоянно соответствовать все внутри тега.Эта модель будет соответствовать:

<h1>This is a heading.</h1><h1>This is another one.</h1>

Возвращает всю строку.* Оператор будет постоянно соответствовать всем — даже среднего тегов h1 закрытия — потому что это жадные.Соответствующие вся строка является лучшим, это может do.

Ленивый Operators

Let’ S изменить выше оператор, добавив ‘? ’ После него.Это позволит сделать его ленивым:

/<h1>.*?<\/h1>/

Регулярных выражений теперь выполняет свою обязанность и соответствует только первый тег h1.Другой жадный оператор, который использует этот же свойство {п}.Это соответствует предыдущему п выражение или более раз.Если он используется без вопросительного знака, он ищет наиболее повторений возможно.В противном случае, он начинается с повторения п:

# Set up a String
$str = 'hihi';

# Match it using the greedy {n,} operator
preg_match( '/(hi){1,}/', $str, $matches ); # matches[0] will be 'hihi'

# Match it with the lazy {n,}? operator
preg_match( '/(hi){1,}?/', $str, $matches ); # matches[0] will be 'hi'

2.Вернуться Referencing

Back Referencing

Что это does

Назад referencing способобращаться к ранее соответствует модели внутри регулярного выражения.Например, взгляните на это простое регулярное выражение, которое соответствует выражение в кавычки:

# Set up an array of matches
$matches = array();

# Create a String
$str = "\"This is a 'string'\"";

# Traverse it with regular expressions
preg_match( "/(\"|').*?(\"|')/", $str, $matches );

# Print the whole match
echo  $matches[0];

К сожалению, это не будет правильно подобрать строку.Вместо этого, он будет печатать:

"This is a '

Это регулярное выражение соответствует открытию двойные кавычки, но находит другого типа цитаты, чтобы закрыть его.Это потому, что она была дана возможность выбора двойные или одинарные кавычки в конце.Для того, чтобы исправить это, вы можете использовать ссылки обратно. выражения \ 1, \ 2, …., \ 9 содержат ссылки на ранее захваченных подмаски.Первый соответствует цитаты, в этом случае, будет проводиться переменной \ 1.

Как использовать It

Для того чтобы применить это понятие к вышеупомянутому примеру, используйте \ 1 в месте последней цитате:

preg_match( '/("|\').*?\1/', $str, $matches );

Это теперь будет корректно возвращать:

"This is a 'string'"

Помните, что спина ссылки также могут быть использованы на preg_replace.Обратите внимание, что вместо \ 1 … \ 9, вы должны использовать $ 1 … 9 $ … $ п (любое число из них будет работать).Например, если вы хотите заменить все теги абзаца с текстом, который представляет их использовать:

$text = preg_replace( '/<p>(.*?)<\/p>/', 
"&lt;p&gt;$1&lt;/p&gt;", $html );

$ 1 обратная ссылка содержит текст внутри абзаца и используется в замене самого шаблона.Это вполне справедливо выражение показывает простой способ доступа соответствует модели даже тогда, когда replacing.

3.Именованные Groups

При использовании нескольких обратных ссылок, регулярное выражение может быстро стать запутанным и трудным для понимания.Альтернативный способ обратной ссылки является использование имени groups.Имени группы задается с помощью (?P<name>pattern), где это имя группы и картина регулярного выражения в самой группе.Группа может быть передан на (? P = имя).Рассмотрим, например, следующее:

/(?P<quote>"|').*?(?P=quote)/

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

Именованные группы также полезны при просеивании через массив матчей.Имя, данное определенному шаблону также является ключом соответствующего матчей array.

preg_match( '/(?P<quote>"|\')/', "'String'", $matches );

# This will print "'"
echo $matches[1];

# This will also print "'", as it is a named group
echo $matches['quote'];

Таким образом, названные группы не только сделать код более удобным для чтения, но и организовать it.

4.Слово Boundaries

Word Boundaries

Слова boundaries места в строке, которые приходят от характера слова и не-слова характер.Особенностью этих границ является то, что они don’ T фактически соответствует характер.Их длина составляет zero.\b регулярное выражение соответствует любому слову boundary.

К сожалению, границы так часто скользил по, что многие не признают их реальное значение.Например, let’ S говорите, что вы хотите, чтобы соответствовать слово “ import”:

/import/

Осторожно!Регулярныйвыражений может быть сложнее.Приведенные выше выражения будет также соответствовать:

important

Вы можете думать, что это так просто, как добавить пробелы до и после импорта, чтобы предотвратить эти фиктивные матчей:

/ import /

Но то, что об этом случае

The trader voted for the import

При импорте в начале или в конце строки, изменение регулярное выражение не удастся.Таким образом, расщепление этого вверх в случаях необходимы:

/(^import | import | import$)/i

Оглядываясь на наше регулярное выражение, это не займет периоды или другие знаки препинания во внимание.Просто, чтобы соответствовать этим одним словом, регулярные выражения могут выглядеть следующим образом:

/(^import(:|;|,)? | import(:|;|,)? | import(\.|\?|!)?$)/i

That’ SA много кода, чтобы соответствовать только одно слово.Именно поэтому границы слова настолько значительны.Для достижения указанных заявления и многих других variations с границами слов, все, что необходимо, это:

/\bimport\b/

Это будет соответствовать любом случае выше и больше.\b ‘ с гибкостью исходит из того, что он соответствует строка нулевой …

Если вы хотите прочитать полностью статью, посетите сайт наших спонсоров

Comments are closed.