Иногда я не знаю, сколько персонажей соответствуют. Чтобы иметь возможность адаптироваться к этой неопределенности, регулярные выражения поддерживают концепцию квалификаторов. Эти квалификаторы могут указать, сколько раз должен появляться заданный компонент регулярного выражения, прежде чем будет выполнена матч.
Следующая таблица дает объяснение различных квалификаторов и их значений:
характер | описывать |
---|---|
* | Соответствует предыдущему суб -экспрессии ноль или несколько раз. Например, Zo* может соответствовать Z и зоопарку. * эквивалентен {0,}. |
+ | Соответствует предыдущей субэкспрессии один или более раз. Например, «ZO+» может соответствовать ZO и ZOO, но не Z. + эквивалентен {1,}. |
? | Соответствует предыдущему суб -экспрессии ноль или один раз. Например, сделайте (ES)? ? |
{ n } | n -неотрицательное целое число. Сопоставьте N -времена, которые определяются. Например, «o {2}» не может совпадать с «o» в BOB, но может соответствовать двум ОС в еде. |
{ n ,} | n -неотрицательное целое число. Совпадать как минимум n раз. Например, 'o {2,}' не может совпадать с «o» в Бобу, но может соответствовать всей ОС в Foooood. 'o {1,}' эквивалентен 'O+'. 'o {0,}' эквивалентен 'O*'. |
{ n , m } | Оба M и N являются неотрицательными целыми числами, где n <= m . Совместите хотя бы n раз и сопоставьте до M Times. Лю, O {1,3} будет соответствовать первой три ОС в Fooooood. 'o {0,1}' эквивалентен 'O?'. Обратите внимание, что между запятыми и двумя числами не может быть пробела. |
Для большого входного документа количество глав может легко превышать девять глав, поэтому есть способ справиться с двузначными или трехзначными номерами. Квалификатор обеспечивает эту функцию. Следующее регулярное выражение JScript может соответствовать заголовку главы с любым количеством битов:
/Chapter [1-9][0-9]*/
Следующее регулярное выражение VBScript выполняет тот же матч:
Chapter [1-9][0-9]*
Обратите внимание, что квалификаторы появляются после выражения диапазона. Следовательно, он будет применен ко всему, содержащемуся выражению диапазона, в этом случае указаны только числа от 0 до 9.
Квалификатор «+» здесь не используется, потому что число не обязательно требуется во второй или последующей позиции. Также не используется персонаж? По крайней мере, один номер должен быть сопоставлен после «главы» и космических символов.
Если известно, что предел главы составляет 99 глав, вы можете использовать следующее выражение JScript, чтобы указать хотя бы одно число, но не более двух чисел.
/Chapter [0-9]{1,2}/
Для VBScript можно использовать следующие регулярные выражения:
Chapter [0-9]{1,2}
Недостатком вышеуказанного выражения является то, что если есть номер главы, превышающий 99, он все равно будет соответствовать первым двум цифрам. Другой недостаток заключается в том, что некоторые люди могут создать главу 0 и все еще совпадать. Лучшее выражение JScript, чтобы соответствовать двузначному номеру следующим образом:
/Chapter [1-9][0-9]?/
или
/Chapter [1-9][0-9]{0,1}/
Для VBScript следующее выражение эквивалентно вышеперечисленному:
Chapter [1-9][0-9]?
или
Chapter [1-9][0-9]{0,1}
« *
» , « +'
И « ?'
Иногда это не то, что вы хотите случиться вообще. Иногда это просто самое маленькое совпадение.
Например, вы можете найти HTML -документ, чтобы найти заголовок главы, включенную в тег H1. В документе текст может иметь следующую форму:
<H1>Chapter 1 – Introduction to Regular Expressions</H1>
Следующее выражение соответствует всем от начала меньше, чем знак (<) до конца маркера H1.
/<.*>/
Регулярное выражение VBScript:
<.*>
Если то, что должно быть сопоставлено, является начальным тегом H1, следующие не-зеленые выражения совпадают только <h1>.
/<.*?>/
или
<.*?>
Поместив "?"
До сих пор примеры, которые видели, рассматривают только поиск названий главах, которые появляются в любом месте. Любая строка «глава», за которой следует пространство и число, может быть реальной заголовкой главы или перекрестной ссылкой на другие главы. Поскольку реальное название главы всегда появляется в начале строки, необходимо разработать метод для поиска только заголовка, а не перекрестной ссылки.
Локаторы обеспечивают эту функцию. Локатор может исправить регулярное выражение в начале или в конце линии. Вы также можете создавать регулярные выражения, которые появляются только в словах или только в начале или конце слова. Следующая таблица содержит список регулярных выражений и их значения:
характер | описывать |
---|---|
^ | Соответствует начальному положению входной строки. Если установлено многослойное свойство объекта Regexp , ^ также соответствует позиции после '/n' или '/r'. |
$ | Соответствует конечной позиции входной строки. Если установлено многослойное свойство объекта Regexp , $ также соответствует позиции до '/n' или '/r'. |
/б | Сопоставьте границу слова, что означает положение между словом и пространством. |
/Б | Соответствовать границам не слов. |
Квалификаторы не могут быть использованы для локаторов. Поскольку не будет последовательных позиций до или после новой линии или границы слов, такие выражения, как «^*», не допускаются.
Чтобы соответствовать тексту в начале линии текста, используйте символ «^» в начале регулярного выражения. Не путайте этот синтаксис '^' с его синтаксисом в скобках. Их синтаксис принципиально отличается.
Чтобы соответствовать тексту в конце линии текста, используйте символ «$» в конце регулярного выражения.
Чтобы использовать локатор при поиске названий главы, следующее регулярное выражение JScript будет соответствовать заголовку главы с двумя числами в начале строки:
/^Chapter [1-9][0-9]{0,1}/
Регулярные выражения для той же функции в VBScript следующие:
^Chapter [1-9][0-9]{0,1}
Реальное название главы не только появляется в начале строки, но и имеет только этот контент в этой строке, так что он также должен быть в конце строки. Следующее выражение гарантирует, что указанное совпадение соответствует только главе и не соответствует перекрестным ссылкам. Это достигается путем создания регулярного выражения, которое соответствует только начальным и конечным позициям линии буквальной.
/^Chapter [1-9][0-9]{0,1}$/
Для VBScript используйте:
^Chapter [1-9][0-9]{0,1}___FCKpd___16quot;
Соответствующие границы слов немного отличаются, но он добавляет очень важную функцию к регулярным выражениям. Граница слова - это положение между словом и пространством. Границы, не сложившие слова, где-нибудь еще. Следующее выражение JScript будет соответствовать первым трем символам слова «глава», потому что они появляются после границы слова:
//bCha/
Для VBScript:
/bCha
Положение оператора «/b» здесь имеет решающее значение. Если это в начале строки, чтобы соответствовать, в начале слова исходит матч; Например, следующее выражение будет соответствовать «ter» в главе «Слово», потому что оно появляется до границы слова:
/ter/b/
а также
ter/b
Следующее выражение будет соответствовать «Apt», потому что оно находится в середине «главы», но не будет соответствовать «Apt» в «Aptitude»:
//Bapt/
а также
/Bapt
Это связано с тем, что «Apt» появляется в неработающей границе в положении в слова «глава» и в слова «способность». Положение операторов, не сложившихся границ, не важна, потому что матч не имеет ничего общего с началом или конец слова.