![]() | КрасносельскийКонстантинКонстантинович |
ТаблицейБлоками.Справочник Веб-дизайнера: файловые шаблоны и регулярные выражения |
Последняя модификация: 25.03.2015 г
Страница загружена с адреса: http://webdesign.site3k.ru/docs/patern.html
Эта статья задумывалась для разьяснения подстановочных символов, могущих использоваться в файле .htaccess и
SSI-директивах. Но вскоре я обнаружил что, во многих книгах и подборках сатей по различным языкам программирования и операционным системам подстановочные символы, файловые шаблоны и регулярные выражения не разъясняются, а, в лучшем случае, лишь упоминаются вскользь. Поэтому, решено было сделать статью более общей, собрав в нее информацию по нескольким языкам. С учетом того, что WEB-программисту приходиться работать сразу с несколькими языками, а подстановочные символы легко забыть или перепутать, как они употребляются в одном языке, а как в другом, перечисление подстановочных символов и регулярных выражений различных языков в одном файле мне кажется очень удобным. Вы можете читать файл целиком, и сравнивать разные реализации шаблонов, а можете сразу перейти по ссылке к конкретному разделу.
Windows-у, файловые шаблоны достались от DOS-а, где имели наиболее примитивный из всех, самых примитивных воплощений. Существовало 2 шаблона:
* Любое количество символов (строка) или их отсутствие.
? Любой символ или его отсутствие.
Например, команда C:\WINDOWS\Рабочий стол>dir a*
Выдавала следующий результат:
apache-rus-doc
about[1].html
abrial-doc.chm
apache-rus-doc.tar.gz
AUTORUN.INF
То есть, все файлы, начинающиеся на «a».
Понимая, что этих шаблонов слишком мало, автор всемирно известных Norton Utilities, Питер Нортон, чьим любимым занятием было усовершенствование DOS (постепенно эти вещи появлялись и у Микрософт: однажды они сделали Скандиск, однажды купили у Нортона усеченный дефрагментатор ), еще в 80-х годах ввел расширенную поддержку шаблонов в свой командный интерпретатор NDOS (Norton Disk Operation Sistem), который предложил в замен Command.com-а. Язык NDOS своими возможностями не уступал бейсику и входил в состав Нортоновских утилит до тех пор, пока не наступило господство Windows. С наступлением эпохи Windows, NDOS утратил значение, так как практически для всех задач, для которых раньше требовалась командная строка, были сделаны графические аналоги и уже никто не хотел помнить, как правильно писать, например, VSCRPUT. Кроме того, NDOS не поддерживал длинных имен, а Питер Нортон, к тому времени, ушел на покой, продав права на разработки и торговые марки корпорации Symantec, так что, продлевать жизнь NDOS-а было некому, а, возможно, и незачем. Но ветераны компьютерного фронта, возможно еще помнят, каким мощным был язык и какими были его файловые шаблоны.
В NDOS, к стандартным звездочке и вопросительному знаку добавились наборы символов и их диапазоны, а так же, логические операторы.
Подобный шаблон заключался в квадратные скобки в которых прописывались требуемые символы, либо диапазон (символ1 символ2). Для обозначения того что, символы, наоборот, не требуются, ставился восклицательный знак. Как в таком случае работала всем известная команда DIR?
dir [acm]* выводит список файлов и каталогов, начинающихся либо на a, либо на c, либо на m.
dir [a-c]* выводит список файлов и каталогов, начинающихся либо на a, либо на b, либо на c.
dir [!c]* выводит список файлов и каталогов, НЕ начинающихся на c.
Заинтересовавшиеся NDOS могут скачать и сам NDOS, и русскоязычную документацию к нему в архивах со страницы
NDOS (поскольку он утратил актуальность, я не распаковываю документацию на сайт).
Однако, не будем далеко отходить от темы.
NDOS раздвинул границу шаблонов, возможно, заимствовав эту идею из Unix (в каком году она там появилась?). По крайней мере, в Unix, для командного интерпретатора Shell, используется тот же синтаксис.
Поиск всех символов (метасимвол *)
Метасимвол * осуществляет поиск любой строки символов, включая нулевую (пустую) строку. Вы можете использовать * для обозначения полного или частичного имени файла. Просто символ * ищет все имена файлов и справочников в текущем справочнике, за исключением тех, которые начинаются с точки.
Символ * может представлять символы в любой части имени файла. Например, если вы знаете, что несколько файлов имеют одинаковые первые и последние буквы, то вы можете выдать запрос, основываясь на этом факте. Если в вашем справочнике находятся файлы FATE, FE, FADED_LINE, FIG3.4E, FINE_LINE, FAST_LINE, то для отображения всех этих файлов используйте шаблон:
F*E
Поиск по одному символу (метасимвол ?)
Метасимвол ? осуществляет поиск любого одного символа в имени файла за исключением лидирующей точки. Предположим, вы имеете книгу, в которой 12 глав и хотите получить список глав до 9-ой главы. Если ваш справочник содержит следующие файлы:
Chapter1
Chapter2
Chapter5
Chapter9
Chapter11
то используйте шаблон с метасимволом ? для получения всех глав, которые начинаются со строки "Chapter" и заканчиваются одним символом:
Chapter1
Chapter2
Chapter5
Chapter9
Хотя метасимвол осуществляет поиск одного символа, вы можете использовать его для поиска более одного символа в имени файла. Например, вы получите перечень всех остальных глав в текущем справочнике, если используете следующий шаблон:
Chapter??
И, конечно, чтобы получить список всех глав в текущем справочнике, используйте метасимвол *:
Chapter*
Поиск одного набора (метасимвол [])
Если вы хотите, чтобы shell нашел любой символ из перечисленных вами символов, то заключите эти символы в квадратные скобки. Предположим, ваш справочник содержит следующие файлы: cat, fat, mat, rat. Если вы воспользуетесь в качестве части имени файла шаблоном [crf], то shell будет искать имена файлов, в которые входят либо буква "c", либо буква "r", либо буква "f" в указанной позиции. Поис по шаблону [crf]at даст следующий результат:
cat
fat
rat
Символы, которые могут быть сгруппированы в скобки, называются классом символов.
Скобки могут также использоваться для обозначения диапазона символов, цифр или букв. Предположим в вашем справочнике содержатся следующие файлы: chapter1, chapter2, chapter3, chapter4, chapter5, chapter6. Если вы укажете:
chapter[1-5]
то shell найдет файлы c chapter1 по chapter5.
Класс символов можно также указать с помощью диапазона букв. Если вы укажете [A-Z], то shell будет искать только большие буквы, если [a-z] - то малые буквы.
Используется ли в Shell символ отрицания, как в NDOS не знаю, не пробовал, а в документации не вижу. Приду на работу, попробую (если не забуду). Напишу, что получится.
Регулярные выражения это больше чем файловые шаблоны. Регулярные выражения, в отличие от файлового шаблона, могут использоваться не только для поиска файлов по маске (более того, с этой целью они могут использоваться непосредственно только в файлах конфигурации сервера, например, .htaccess), но и для анализа текста, для чего не применимы файловые шаблоны.
Простейшим регулярным выражением является строка символов, обрамленная знаками "/". Например:
/Asia/
Эта означает все записи, которые содержат подстроку Asia (например, запись, содержащая Asia как часть длинной строки, подобной Asian или Pan-Asiatic).
Чтобы ограничить поиск следует использовать операторы ~(входит) и !~(не входит).
~/Asia/
ищет подстроку Asia, в то время как программа:
!~/Asia/
ищет подстроку в которой не содержится Asia.
В регулярном выражении могут использоваться метасимволы:
Символ | Описание |
---|---|
^ | указывает на начало строки (~ /^awk/ означает «начинается на awk») |
$ | указывает на конец строки (~ /awk$/ означает «заканчивается на awk») |
. | указывает на любой символ, кроме начала новой строки (~ /.wk/ может соответствовать «awk» но не «wk») |
[] | соответствует любому из указаных в квадратных скобках символу. Если первый символ внутри скобок ^ то берутся символы НЕ указанные в квадратных скобках. Вместо перечисления символов может быть указан диапазон (например «a-c»). |
* | Любая подстрока или её отсутствие |
? | Любой символ или его отсутствие |
| | разделяет альтернативы |
() | групирует символы (~ /(awk|Shell)/ означает либо «awk», либо «Shell») |
+ | означает что предыдущий символ или группа может повториться несколько раз (~ /(awk)+/ означает либо «awk», либо «awkawk», либо «awkawkawk» и т. д.) |
\ | отменяет специальное значение символа, превращая его из метасимвола в обычный (~ /\^awk/ означает именно подстроку «^awk») |
Например:
/^.$/
просматривает записи для поиска записи, состоящей из одного символа.
/[a-zA-Z]/
поиск любой английской буквы
/^[0-9]+$/
Состоит только из цифр
В дополнение к распознаваемым метасимволам, awk распознает следующие последовательности языка программирования Си внутри регулярных выражений и строк:
\b возврат
\f перевод формата
\n новая строка
\r возврат каретки
\t табуляция
\ddd восьмиричное значение
\" кавычки
c любой метасимвол
\c с
Например, выражение
/\t/
Означает поиск табуляции
Предположим, что нужно найти строку символов, подобную ^[0-9]+$. Если строка "^[0-9]+$" используется как регулярное выражение, появляются дополнительные знаки "\", которые защищают регулярное выражение. Это связано с тем, что первый уровень знаков "\" удаляется при синтаксическом анализе строки. Первый уровень "\" перед символом возвращает его специальное значение в регулярном выражении, второй нужен, чтобы защитить его в строке.
Например, нужно найти строки, содержащие "b" и следующий за ним знак "$". Регулярное выражение для этого шаблона:
b\$
Чтобы создать строку для представления этого регулярного выражения, необходимо добавить еще один символ "\":
"b\\$"
Следующие регулярные выражения попарно эквивалентны:
x ~ "b\\$" | x ~ /b\$/ |
x ~ "b\$" | x ~ /b$/ |
x ~ "b$" | x ~ /b$/ |
x ~ \\t | x ~ /\t/ |
Символ | Описание |
---|---|
. | Соответствует любому символу (за исключением символа новой строки) |
(...) | Группирует последовательность элементов |
+ | Удовлетворяет предыдущему образцу один или большее количество раз |
? | Удовлетворяет образцу ноль или один раз |
* | Соответствует образцу ноль или множество раз |
[...] | Соответствует символу из заданного множества |
[^...] | Соответствует символу из множества, полученного отрицанием |
(...|...|...) | Соответствует одной из альтернатив |
^ | Соответствует началу строки |
$ | Соответствует образцу в конце строки |
{n, m} | Соответствует образцу от n до m раз |
{n} | Соответствует образцу точно n раз |
{n,} | Соответствует образцу минимум n раз |
\n\t etc. | Соответствует знаку новой линии, символу табуляции и т. д. |
\b | Соответствует на границе слова |
\В | Соответствует НЕ границе слова |
\d | Соответствует цифре |
\D | Соответствует не цифре |
\s | Соответствует пробелу |
\S | Соответствует не пробелу |
\w | Соответствует букве или цифре |
\W | Соответствует символу, не являющемуся ни буквой, ни цифрой |
Perl помещает регулярные выражения (образцы, шаблоны) в слэши, т. е. в наклонные черточки, например, в виде /pattern/. Следующие регулярные выражения истинны если:
/ig/ | Строка содержит 'ig' |
/(b|d|f)ig/ | Строка содержит big, dig or fig |
/[0-9]+/ | Строка содержит номер |
Регулярные используют выражения для того, чтобы упростить сравнение строк. Для того чтобы проверить, содержит ли строка заданный образец, скрипт может использовать регулярные выражения следующим образом:
if ($str =~ /pattern/)
В данном случае регулярные выражения принимают значение «истинно», если образец найден в строке ($str). Если строка по содержит образца, то выражение возвращает значение «ложно». Например, следующее выражение проверяет, содержит ли строка текст Web Programming:
if ($str =~ /Web Programming/)
Для того, чтобы проверить полное совпадение, выражение должно привязать сравнение к началу и концу строки. Например, следующее выражение имеет значением величину «истинно», если и только если переменная $str принимает одно из трех значений: «banana», «bananana») «banananana»:
($str =~ /^ba(na) {2,4}$/)
Аналогичным образом, следующее выражение истинно тогда и только тогда, когда переменная $str содержит слово «the» и не является частью другого слова, такого как «their».
($str =~ /\bthe\b/)
Регулярные выражения лежат в основе всех современных технологий поиска по шаблону. Регулярное выражение представляет собой последовательность простых и служебных символов, описывающих искомый текст. Иногда регулярные выражения бывают простыми и понятными (например, слово dog), но часто в них присутствуют служебные символы, обладающие особым смыслом в синтаксисе регулярных выражений, например, <(?)>.*<\/.?>.
В РНР существуют два семейства функций, каждое из которых относится к определенному типу регулярных выражений: в стиле POSIX или в стиле Perl. Каждый тип регулярных выражений обладает собственным синтаксисом.
Структура регулярных выражений POSIX чем-то напоминает структуру типичных математических выражений различные элементы (операторы) объединяются друг с другом и образуют более сложные выражения. Однако именно смысл объединения элементов делает регулярные выражения таким мощным и выразительным средством. Возможности не ограничиваются поиском литерального текста (например, конкретного слова или числа); вы можете провести поиск строк с разной семантикой, но похожим синтаксисом например, всех тегов HTML в файле.
Простейшее регулярное выражение совпадает с одним литеральным символом например, выражение g совпадает в таких строках, как g, haggle и bag. Выражение, полученное при объединении нескольких литеральных символов, совпадает по тем же правилам например, последовательность gan совпадает в любой строке, содержащей эти символы (например, gang, organize или Reagan).
Оператор | (вертикальная черта) проверяет совпадение одной из нескольких альтернатив. Например, регулярное выражение php | zend проверяет строку на наличие php или zend.
Квадратные скобки
Квадратные скобки ([ ]) имеют особый смысл в контексте регулярных выражений они означают «любой символ из перечисленных в скобках». В отличие от регулярного выражения php, которое совпадает во всех строках, содержащих литеральный текст php, выражение [php] совпадает в любой строке, содержащей символы р или h. Квадратные скобки играют важную роль при работе с регулярными выражениями, поскольку в процессе поиска часто возникает задача поиска символов из заданного интервала. Ниже перечислены некоторые часто используемые интервалы:
[0-9] совпадает с любой десятичной цифрой от 0 до 9;
[a-z] совпадает с любым символом нижнего регистра от а до z;
[A-Z] совпадает с любым символом верхнего регистра от А до Z;
[a -Z] совпадает с любым символом нижнего или верхнего регистра от а до Z.
Конечно, перечисленные выше интервалы всего лишь демонстрируют общий принцип. Например, вы можете воспользоваться интервалом [0-3] для обозначения любой десятичной цифры от 0 до 3 или интервалом [b-v] для обозначения любого символа нижнего регистра от b до v. Короче говоря, интервалы определяются совершенно произвольно.
Именованные интервалы
Именованные интервалы символов являются предопределенными интервалами, имеющими удобочитаемое английское название, заключенное в двоеточия и квадратные кавычки.
[:alpha:] — буква ;
[:digit:] — цифра ;
[:alnum:] — буква или цифра ;
[:space:] — пробельный символ ;
[:blank:] — пробельный символ или символы с кодом 0 и 255;
[:cnrtl:] — управляющий символ ;
[:graph:] — символ псевдографики ;
[:lower:] — символ нижнего регистра ;
[:upper:] — символ верхнего регистра ;
[:print:] — печатаемый символ ;
[:punct:] — знак пунктуации ;
[:xdigit:] — цифра или буква от A до Z .
При применении, именованые интервалы должны заключаться в дополнительные кавычки:
abc[[:alnum:]]+ // abc, затем одна или более буква или цифра.
abc[[:alpha:][:punct]0] // abc, далее буква , знак пунктуации или 0.
Выражение
abc[:alnum:]+
Будет неправильным.
Квантификаторы
Существует особый класс служебных символов, обозначающих количество повторений отдельного символа или конструкции, заключенной в квадратные скобки. Эти служебные символы (+, * и {...}) называются квантификаторами. Принцип их действия проще всего пояснить на примерах:
р+ означает один или несколько символов р, стоящих подряд;
р* означает ноль и более символов р, стоящих подряд;
р? означает ноль или один символ р;
р{2} означает два символа р, стоящих подряд;
р{2,3} означает от двух до трех символов р, стоящих подряд;
р{2,} означает два и более символов р, стоящих подряд.
Прочие служебные символы
Служебные символы $ и ^ совпадают не с символами, а с определенными позициями в строке. Например, выражение р$ означает строку, которая завершается символом р, а выражение ^р строку, начинающуюся с символа р.
Конструкция [^a-zA-Z] совпадает с любым символом, не входящим в указаные интервалы (a-z и A-Z).
Служебный символ . (точка) означает «любой символ». Например, выражение р.р совпадает с символом р, за которым следует произвольный символ, после чего опять следует символ р.
Объединение служебных символов приводит к появлению более сложных выражений. Рассмотрим несколько примеров:
^.{2}$ любая строка, содержащая ровно два символа;
<b>(.*)</b> произвольная последовательность символов, заключенная между <Ь> и </Ь> (вероятно, тегами HTML для вывода жирного текста);
p(hp)* символ р, за которым следует ноль и более экземпляров последовательности hp (например, phphphp).
Иногда требуется найти служебные символы в строках вместо того, чтобы использовать их в описанном специальном контексте. Для этого служебные символы экранируются обратной косой чертой (\). Например, для поиска денежной суммы в долларах можно воспользоваться выражением \$[0-9]+, то есть «знак доллара, за которым следует одна или несколько десятичных цифр». Обратите внимание на обратную косую черту перед $. Возможными совпадениями для этого регулярного выражения являются $42, $560 и $3.
Perl давно считается одним из самых лучших языков обработки текстов. Синтаксис Perl позволяет осуществлять поиск и замену даже для самых сложных шаблонов. Разработчики РHР сочли, что не стоит заново изобретать уже изобретенное, а лучше сделать знаменитый синтаксис регулярных выражений Perl доступным для пользователей РНР. Так появились функции для работы с регулярными выражениями в стиле Perl.
Диалект регулярных выражений Perl не так уж сильно отличается от диалекта POSIX. В сущности, синтаксис регулярных выражений Perl является отдаленным потомком реализации POSIX, вследствие чего синтаксис POSIX почти совместим с функциями регулярных выражений стиля Perl.
Оставшаяся часть этого раздела будет посвящена краткому знакомству с диалектом регулярных выражений Perl. Рассмотрим простой пример:
/food/
Обратите внимание: строка food заключена между двумя косыми чертами. Как и в стандарте POSIX, вы можете создавать более сложные шаблоны при помощи квантификаторов:
/fo+/
Этот шаблон совпадает с последовательностью fo, за которой могут следовать дополнительные символы о. Например, совпадения будут обнаружены в строках food, fool и fo4. Рассмотрим другой пример использования квантификатора:
/fo{2,4}/
Шаблон совпадает с символом f, за которым следуют от 2 до 4 экземпляров символа о. К числу потенциальных совпадений относятся строки fool , fooool и foosball .
В регулярных выражениях Perl могут использоваться все квантификаторы, упомянутые в предыдущем разделе для регулярных выражений POSIX.
Метасимволы
Одной из интересных особенностей Perl является использование метасимволов при поиске. Метасимвол [Следует отметить, что авторское толкование термина «метасимвол» противоречит не только всем традициям, по и официальной документации РНР. Примеч. перев.] представляет собой алфавитный символ с префиксом \ признаком особой интерпретации следующего символа. Например, метасимвол \d может использоваться при поиске денежных сумм:
/([\d]+)000/
Комбинация \d обозначает любую цифру. Конечно, в процессе поиска часто возникает задача идентификации алфавитно-цифровых символов, поэтому в Perl для них был определен метасимвол \w:
/<([\w]+)>/
Этот шаблон совпадает с конструкциями, заключенными в угловые скобки, например, тёгами HTML. Кстати, метасимвол \W имеет прямо противоположный смысл и используется для идентификации символов, не являющихся алфавитно-цифровыми.
Еще один полезный метасимвол, \b, совпадает с границами слов:
/sa\b/
Поскольку метасимвол границы слова расположен справа от текста, этот шаблон совпадет в строках salsa и lisa, но не в строке sand. Противоположный метасимвол, \В, совпадает с чем угодно, кроме границы слова:
/sa\B/
Шаблон совпадает в таких строках, как sand и Sally, но не совпадает в строке salsa.
Модификаторы
Модификаторы заметно упрощают работу с регулярными выражениями. Впрочем, модификаторов много, и в таблице приведены лишь наиболее интересные из них. Модификаторы перечисляются сразу же после регулярного выражения например, /string/i.
Модификатор | Описание |
---|---|
m | Фрагмент текста интерпретируется как состоящий из нескольких «логических строк». По умолчанию специальные символы ^ и $ совпадают только в начале и в конце всего фрагмента. При включении «многострочного режима» при помощи модификатора m^ и $ будут совпадать в начале и в конце каждой логической строки внутри фрагмента |
s | По смыслу противоположен модификатору m при поиске фрагмент интерпретируется как одна строка, а все внутренние символы новой строки игнорируются |
i | Поиск выполняется без учета регистра символов |
Патэрн регулярного выражения состоит из простых символов, например, /abc/, или из комбинаций простых и специальных символов, как /ab*c/ или /Chapter (\d+)\.\d*/. В последнем примере имеются скобки, которые использованы как запоминающее устройство. Совпадение, сделанное этой частью патэрна, запоминается для последующего использования.
Использование простых патэрнов
Простые патэрны состоят из символов, для которых ищется прямое совпадение. Например, патэрн /abc/ совпадает с комбинацией символов в строке только тогда, когда символы 'abc' появляются вместе и в указанном порядке. Такое совпадение будет найдено в строках "Hi, do you know your abc's?" и "The latest airplane designs evolved from slabcraft." В обоих случаях имеется совпадение с подстрокой 'abc'. В строке "Grab crab" совпадения нет, потому что она не содержит подстроки 'abc'.
Использование специальных символов
Если при поиске требуется выполнить нечто большее, чем простое совпадение, например, найти один или более символов b или найти пробелы, патэрн должен содержать специальные символы. Например, патэрн /ab*c/ совпадает с любой комбинацией символов, в которой после одиночного 'a' следуют ноль или более 'b' (* означает 0 или более вхождений предыдущего символа) и символ 'c'. В строке "cbbabbbbcdebc" этот патэрн совпадает с подстрокой 'abbbbc'.
В таблице дан полный список - описание специальных символов, которые могут использоваться в регулярных выражениях.
Символ | Описание |
---|---|
\ | Один из следующих вариантов: Для символов, которые обычно рассматриваются литерально, указывает, что следующий символ является специальным и не должен интерпретироваться литерально. Например, /b/ совпадает с символом 'b'. При помещении обратного слеша перед b, то есть /\b/, символ становится специальным, обозначая границу слова. Для символов, которые обычно рассматриваются как специальные, указывает что следующий символ не является специальным и должен интерпретироваться литерально. Например, * это специальный символ, который означает 0 или более совпадений с вхождением предыдущего символа; например, /a*/ означает 0 или более символов а. Для подстановки * литерально, поставьте перед ним обратный слеш; например, /a\*/ совпадает с 'a*'. |
^ | Совпадает с началом строки. Например, /^A/ не совпадает с 'A' в строке "an A," но совпадает с первой А в строке "An A". |
$ | Совпадает с концом строки. Например, /t$/ не совпадает с 't' в "eater", но совпадает в "eat". |
* | Предшествующий символ совпадает 0 или более раз. Например, /bo*/ совпадает с 'boooo' в "A ghost booooed" и с 'b' в "A bird warbled", но не совпадает в "A goat grunted". |
+ | Предшествующий символ совпадает 1 или более раз. Эквивалентно {1,}. Например, /a+/ совпадает с «a» в "candy" и всеми «a» в "caaaaaaandy." |
? | Предшествующий символ совпадает 0 или 1 раз. Например, /e?le?/ совпадает с 'el' в "angel" и с 'le' в "angle." |
. | (Десятичная точка) совпадает с любым одиночным символом, кроме символа новой строки. Например, /.n/ совпадает с 'an' и с 'on' в "nay, an apple is on the tree", но не с 'nay'. |
(x) | Симол 'x', запоминает его для последующего использования. Например, /(foo)/ совпадает (и запоминает) с 'foo' в "foo bar." Совпавшая подстрока может быть вызвана из результирующего массива элементов [1], ..., [n] или из свойств $1, ..., $9 предопределённого объекта RegExp. Например: <SCRIPT LANGUAGE="JavaScript1.2"> re = /(\w+)\s(\w+)/; str = "John Smith"; newstr = str.replace(re, "$2, $1"); document.write(newstr) </SCRIPT> Будет выведено "Smith, John". |
x | y | 'x' или с 'y'. Например, /green|red/ совпадает с 'green' в "green apple" и с 'red' в "red apple." |
{n} | Где n это положительное целое. Предшествующий символ совпадает точно n раз. Например, /a{2}/ не совпадает с 'a' в "candy", но совпадает со всеми 'a' в "caandy" и с первыми двумя 'a' в "caaandy." |
{n,} | Где n это положительное целое. Предшествующий символ совпадает как минимум n раз. Например, /a{2,} не совпадает с 'a' в "candy", но совпадает со всеми 'a' в "caandy" и в "caaaaaaandy." |
{n,m} | Где n и m это положительные целые. Предшествующий символ совпадает как минимум n и максимум m раз. Например, /a{1,3}/ не совпадает ни с чем в "cndy", совпадает с 'a' in "candy," первыми двумя 'a' в "caandy" и первыми тремя 'a' в "caaaaaaandy" Обратите внимание, что в "caaaaaaandy" совпадает только "aaa", хотя строка-оригинал содержит больше символов 'a'. |
[xyz] | Набор символов. Совпадает с любым одним из символов патэрна. Вы можете специфицировать диапазон символов, используя дефис. Например, [abcd] эквивалентно [a-d]. Совпадает с 'b' в "brisket" и с 'c' в "ache". |
[^xyz] | Отрицание набора символов. То есть совпадение со всем, кроме того, что находится в скобках. Вы можете специфицировать диапазон символов, используя дефис. Например, [^abc] это то же самое, что [^a-c]. Первоначально совпадает с 'r' в "brisket" и с 'h' в "chop". |
[\b] | backspace. (Не путайте с \b.) |
\b | Граница слова пробел/space или символ новой строки. (Не путайте с [\b].) Например, /\bn\w/ совпадает с 'no' in "noonday"; /\wy\b/ совпадает с 'ly' in "possibly yesterday". |
\B | НЕ граница слова. Например, /\w\Bn/ совпадает с 'on' в "noonday"; /y\B\w/ совпадает с 'ye' в "possibly yesterday". |
\cX | Где X это управляющий символ. Совпадает с управляющим символом в строке. Например, /\cM/ совпадает с комбинацией control-M. |
\d | Цыфра. Эквивалентно [0-9]. Например, /\d/ или /[0-9]/ совпадает с '2' в строке "B2 is the suite number". |
\D | Не-цифра. Эквивалентно [^0-9]. Например, /\D/ или /[^0-9]/ совпадает с 'B' в "B2 is the suite number" |
\f | Знак перехода к новой странице. |
\n | Начало новой строки (начало абзаца в Unix-системах) |
\r | Возврат каретки (комбинация \r\n дает начало абзаца в DOS-системах) |
\s | Совпадает с одиночным пробельным символом, включая space, tab, form feed, line feed. Эквивалентно [ \f\n\r\t\v]. Например, /\s\w*/ совпадает с ' bar' в "foo bar". |
\S | Совпадает с одиночным символом, отличным от пробела. Эквивалентно [^ \f\n\r\t\v]. Например, /\S\w*/ совпадает с 'foo' в "foo bar." |
\t | Совпадает с tab. |
\v | Совпадает с vertical tab. |
\w | Совпадает с любым алфавитно-цифровым символом, включая символ подчёркивания. Эквивалентно [A-Za-z0-9_]. Например, /\w/ совпадает с 'a' в "apple", с '5' в "$5.28" и с '3' в "3D." |
\W | Совпадает с любым не-алфавитно-цифровым символом. Эквивалентно [^A-Za-z0-9_]. Например, /\W/ или /[^$A-Za-z0-9_]/ совпадает с '%' в "50%." |
\n | Где n это положительное целое. Обратная ссылка на последнее совпадение подстроки с n в скобках из регулярного выражения (с учётом левых скобок). Например, /apple(,)\sorange\1/ совпадает с 'apple, orange,' в "apple, orange, cherry, peach." Примечание: Если количество левых скобок меньше числа, специфицированного в \n, то \n считается восьмеричной escape-последовательностью, как описано в следующем ряду. |
\ooctal \xhex | Где \ooctal это 8-ричное escape-значение или где \xhex это 16-ричное escape-значение. Даёт возможность внедрять ASCII-коды в регулярные выражения. |