Вводная информация по регулярным выражениям.
См форум https://keysystems.ru/forum/index.php?showtopic=13362&p=141139
В регулярных выражениях все символы делятся на обычные (литералы) и специальные (метасимволы). Обычные представляют сами себя, а специальные служат для описания различных сущностей. Специальные символы [ ] \ / ^ $ . | ? * + ( ) { } . Чтобы метасимвол в выражении представил самого себя, его надо экранировать символом \ . Например есть в выражении . - это спецсимвол, а \. - это просто точка.
Далее используется понятие "квантификатор" - это специальный ограничитель, который указывает количество возможных повторений символа, группы символов или класса символов, находящихся в регулярном выражении перед ним.
Часто используемые метасимволы:
Метасимвол
|
Значение
|
\
|
Для обычных символов - делает их специальными. Например, выражение s ищет просто символ 's'. А если поставить \ перед s, то \s уже обозначает пробельный символ.И наоборот, если символ специальный, например *, то \ сделает его просто обычным символом "звездочка".
Например, a* ищет 0 или больше подряд идущих символов 'a'. Чтобы найти а со звездочкой 'a*' - поставим \ перед спец. символом: a\*.
|
^
|
Обозначает начало входных данных. Если установлен флаг многострочного поиска ("m"), то также сработает при начале новой строки. Например, ^A не найдет 'A' в "an A", но найдет первое '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".
|
?
|
Обозначает, что элемент может как присутствовать, так и отсутствовать. Например, e?le? найдет 'el' в "angel" и 'le' в "angle" . Если используется сразу после одного из квантификаторов: *, +, ?, или {} - то задает "нежадный" поиск (повторение минимально возможное количество раз, до ближайшего следующего элемента паттерна), в противоположность "жадному" режиму по умолчанию, при котором количество повторений максимально, даже если следующий элемент паттерна тоже подходит. Кроме того, ? используется в предпросмотре, который описан в таблице под (?=), (?!), и (?: ).
|
.
|
(Десятичная точка) обозначает любой символ, кроме перевода строки: \n \r \u2028 or \u2029. (можно использовать [\s\S] для поиска любого символа, включая переводы строк). Например, .n найдет 'an' и 'on' в "nay, an apple is on the tree", но не 'nay'.
|
(x)
|
Находит x и запоминает. Это называется "запоминающие скобки". Например, (foo) найдет и запомнит 'foo' в "foo bar." Найденная подстрока хранится в массиве-результате поиска или в предопределенных свойствах объекта RegExp: $1, ..., $9. Кроме того, скобки объединяют то, что в них находится, в единый элемент паттерна. Например, (abc)* - повторение abc 0 и более раз.
|
(?:x)
|
Находит x, но не запоминает найденное. Это называется "незапоминающие скобки". Найденная подстрока не сохраняется в массиве результатов и свойствах RegExp. Как и все скобки, объединяют находящееся в них в единый подпаттерн.
|
x(?=y)
|
Находит x, только если за x следует y. Например, Jack(?=Sprat) найдет 'Jack', только если за ним следует 'Sprat'. Jack(?=Sprat|Frost) найдет 'Jack', только если за ним следует 'Sprat' или 'Frost'. Однако, ни 'Sprat' ни 'Frost' не войдут в результат поиска.
|
x(?!y)
|
Находит x, только если за x не следует y. Например, \d+(?!\.) найдет число, только если за ним не следует десятичная точка. \d+(?!\.) найдет 141 в "3.141", но не 3.141.
|
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 повторений элемента.
|
[xyz]
|
Набор символов. Находит любой из перечисленных символов. Вы можете указать промежуток, используя тире. Например, [abcd] - то же самое, что [a-d]: найдет 'b' в "brisket", а также 'a' и 'c' в "ache".
|
[^xyz]
|
Любой символ, кроме указанных в наборе. Вы также можете указать промежуток. Например, [^abc] - то же самое, что [^a-c] : найдет 'r' в "brisket" и 'h' в "chop."
|
[\b]
|
Находит символ backspace. (Не путать с \b.)
|
\b
|
Находит границу слов (латинских), например пробел. (Не путать с [\b]). Например, \bn\w найдет 'no' в "noonday"; \wy\b найдет 'ly' в "possibly yesterday."
|
\B
|
Обозначает не границу слов. Например, \w\Bn найдет 'on' в "noonday", а y\B\w найдет 'ye' в "possibly yesterday."
|
\cX
|
Где X - буква от A до Z. Обозначает контрольный символ в строке. Например, \cM обозначает символ Ctrl-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,\r,\n
|
Соответствующие спецсимволы: form-feed, line-feed, перевод строки.
|
\s
|
Найдет любой пробельный символ, включая пробел, табуляцию, переводы строки и другие юникодные пробельные символы. Например, \s\w* найдет ' bar' в "foo bar."
|
\S
|
Найдет любой символ, кроме пробельного. Например, \S\w* найдет 'foo' в "foo bar."
|
\t
|
Символ табуляции.
|
\v
|
Символ вертикальной табуляции.
|
\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-ю запомненную скобками подстроку (см метасимвол (x) ). Например, apple(,)\sorange\1 найдет 'apple, orange,' в "apple, orange, cherry, peach." .
|
\0
|
Найдет символ NULL. Не добавляйте в конец другие цифры.
|
\xhh
|
Найдет символ с кодом hh (2 шестнадцатиричных цифры).
|
\uhhhh
|
Найдет символ с кодом hhhh (4 шестнадцатиричных цифры).
|
В "Бюджет-СМАРТ" есть несколько отступлений от стандарта регулярных выражений:
1) | скобки [ ] в справочнике шаблонов интерпретируются как описание необязательного элемента или группы элементов (вместо ? в стандарте). Например LS0302 [БО NBO] означает, что после номера л/с может присутствовать, а может и отсутствовать номер БО с префиксом "БО". |
2) | пробел интерпретируется как "ноль или много повторений" пробельного символа. Например VID SUMMA означает, что между кодом вида расхода и суммой может отсутствовать пробел, либо быть один пробел либо сколько угодно пробелов подряд. |
3) | запрещены шестнадцатиричные коды (выражения вида \xHH , где HH - две шестнадцатиричные цифры). |
См так же википедию или любой другой ресурс в сети.
|