Tcl - регулярные выражения
Команда "regexp" используется для сопоставления регулярного выражения в Tcl. Регулярное выражение - это последовательность символов, содержащая шаблон поиска. Он состоит из нескольких правил, и в следующей таблице объясняются эти правила и соответствующее использование.
Sr.No. | Правило и описание |
---|---|
1 | x Полное совпадение. |
2 | [a-z] Любая строчная буква от az. |
3 | . Любой персонаж. |
4 | ^ Начальная строка должна совпадать. |
5 | $ Конечная строка должна совпадать. |
6 | \^ Последовательность люфтов для соответствия специальному символу ^. Аналогично вы можете использовать для других символов. |
7 | () Добавьте указанные выше последовательности в скобки, чтобы получилось регулярное выражение. |
8 | x* Должно соответствовать 0 или более вхождений предыдущего x. |
9 | x+ Должно соответствовать одному или нескольким вхождениям предыдущего x. |
10 | [a-z]? Должен соответствовать 0 или 1 вхождению предыдущего x. |
11 | {digit} Точно соответствует вхождению цифр предыдущего выражения регулярного выражения. Цифра, содержащая 0–9. |
12 | {digit,} Соответствует 3 или более разрядам предыдущего выражения регулярного выражения. Цифра, содержащая 0–9. |
13 | {digit1,digit2} Вхождения соответствует диапазону между вхождениями digit1 и digit2 предыдущего выражения регулярного выражения. |
Синтаксис
Синтаксис для регулярного выражения приведен ниже -
regexp optionalSwitches patterns searchString fullMatch subMatch1 ... subMatchn
Здесь регулярное выражение - это команда. О дополнительных переключателях мы поговорим позже. Шаблоны - это правила, упомянутые ранее. Строка поиска - это фактическая строка, для которой выполняется регулярное выражение. Полное совпадение - это любая переменная, в которой хранится результат согласованного результата регулярного выражения. От Submatch1 до SubMatchn - это необязательная переменная subMatch, которая содержит результат шаблонов под совпадения.
Давайте рассмотрим несколько простых примеров, прежде чем погрузиться в сложные. Простой пример строки с любыми алфавитами. Когда в регулярном выражении встречается любой другой символ, поиск останавливается и возвращается.
#!/usr/bin/tclsh
regexp {([A-Za-z]*)} "Tcl Tutorial" a b
puts "Full Match: $a"
puts "Sub Match1: $b"
Когда приведенный выше код выполняется, он дает следующий результат:
Full Match: Tcl
Sub Match1: Tcl
Множественные шаблоны
В следующем примере показано, как искать несколько шаблонов. Это пример шаблона для любых алфавитов, за которыми следует любой символ, за которым следует любой алфавит.
#!/usr/bin/tclsh
regexp {([A-Za-z]*).([A-Za-z]*)} "Tcl Tutorial" a b c
puts "Full Match: $a"
puts "Sub Match1: $b"
puts "Sub Match2: $c"
Когда приведенный выше код выполняется, он дает следующий результат:
Full Match: Tcl Tutorial
Sub Match1: Tcl
Sub Match2: Tutorial
Измененная версия приведенного выше кода, показывающая, что подшаблон может содержать несколько шаблонов, показана ниже -
#!/usr/bin/tclsh
regexp {([A-Za-z]*.([A-Za-z]*))} "Tcl Tutorial" a b c
puts "Full Match: $a"
puts "Sub Match1: $b"
puts "Sub Match2: $c"
Когда приведенный выше код выполняется, он дает следующий результат:
Full Match: Tcl Tutorial
Sub Match1: Tcl Tutorial
Sub Match2: Tutorial
Переключатели для команды Regex
Список переключателей, доступных в Tcl:
nocase - Используется для игнорирования регистра.
indices - Сохраняйте местоположение совпадающих подшаблонов вместо совпадающих символов.
line- Новое соответствие строки. Игнорирует символы после новой строки.
start index - Устанавливает смещение начала поискового шаблона.
Обозначает конец переключателей
В приведенных выше примерах я намеренно использовал [AZ, az] для всех алфавитов, вы можете легко использовать -nocase вместо того, как показано ниже -
#!/usr/bin/tclsh
regexp -nocase {([A-Z]*.([A-Z]*))} "Tcl Tutorial" a b c
puts "Full Match: $a"
puts "Sub Match1: $b"
puts "Sub Match2: $c"
Когда приведенный выше код выполняется, он дает следующий результат:
Full Match: Tcl Tutorial
Sub Match1: Tcl Tutorial
Sub Match2: Tutorial
Другой пример использования переключателей показан ниже -
#!/usr/bin/tclsh
regexp -nocase -line -- {([A-Z]*.([A-Z]*))} "Tcl \nTutorial" a b
puts "Full Match: $a"
puts "Sub Match1: $b"
regexp -nocase -start 4 -line -- {([A-Z]*.([A-Z]*))} "Tcl \nTutorial" a b
puts "Full Match: $a"
puts "Sub Match1: $b"
Когда приведенный выше код выполняется, он дает следующий результат:
Full Match: Tcl
Sub Match1: Tcl
Full Match: Tutorial
Sub Match1: Tutorial