Учебники

Tcl — регулярные выражения

Команда «regexp» используется для соответствия регулярному выражению в Tcl. Регулярное выражение — это последовательность символов, которая содержит шаблон поиска. Он состоит из нескольких правил, и следующая таблица объясняет эти правила и их соответствующее использование.

Sr.No. Правило и описание
1

Икс

Полное совпадение.

2

[AZ]

Любая строчная буква от аз.

3

,

Любой персонаж.

4

^

Начальная строка должна совпадать.

5

$

Конечная строка должна совпадать.

6

\ ^

Последовательность люфта для соответствия специальному символу ^. Аналогично вы можете использовать для других символов.

7

()

Добавьте вышеуказанные последовательности в круглые скобки, чтобы сделать регулярное выражение.

8

Икс*

Должно совпадать с 0 или более вхождениями предыдущего x.

9

х & плюс;

Должно совпадать с 1 или более вхождениями предыдущего x.

10

[AZ]?

Должно совпадать с 0 или 1 вхождением предыдущего x.

11

{разряд}

Совпадает точно с цифрами вхождения предыдущего выражения регулярного выражения. Цифра, которая содержит 0-9.

12

{цифра}

Соответствует 3 или более разрядам предыдущего выражения регулярного выражения. Цифра, которая содержит 0-9.

13

{Digit1, digit2}

Вхождения соответствуют диапазону между цифрами 1 и 2 в предыдущем выражении регулярного выражения.

Икс

Полное совпадение.

[AZ]

Любая строчная буква от аз.

,

Любой персонаж.

^

Начальная строка должна совпадать.

$

Конечная строка должна совпадать.

\ ^

Последовательность люфта для соответствия специальному символу ^. Аналогично вы можете использовать для других символов.

()

Добавьте вышеуказанные последовательности в круглые скобки, чтобы сделать регулярное выражение.

Икс*

Должно совпадать с 0 или более вхождениями предыдущего x.

х & плюс;

Должно совпадать с 1 или более вхождениями предыдущего x.

[AZ]?

Должно совпадать с 0 или 1 вхождением предыдущего x.

{разряд}

Совпадает точно с цифрами вхождения предыдущего выражения регулярного выражения. Цифра, которая содержит 0-9.

{цифра}

Соответствует 3 или более разрядам предыдущего выражения регулярного выражения. Цифра, которая содержит 0-9.

{Digit1, digit2}

Вхождения соответствуют диапазону между цифрами 1 и 2 в предыдущем выражении регулярного выражения.

Синтаксис

Синтаксис для регулярных выражений приведен ниже —

regexp optionalSwitches patterns searchString fullMatch subMatch1 ... subMatchn

Здесь регулярное выражение является командой. О дополнительных переключателях мы увидим позже. Шаблоны — это правила, упомянутые ранее. Строка поиска — это фактическая строка, в которой выполняется регулярное выражение. Полное совпадение — это любая переменная, в которой содержится результат сопоставленного результата регулярного выражения. Submatch1 to SubMatchn — это необязательная переменная subMatch, которая содержит результат шаблонов субсовпадений.

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

Live Demo

#!/usr/bin/tclsh

regexp {([A-Z,a-z]*)} "Tcl Tutorial" a b 
puts "Full Match: $a"
puts "Sub Match1: $b"

Когда приведенный выше код выполняется, он дает следующий результат —

Full Match: Tcl
Sub Match1: Tcl

Несколько шаблонов

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

Live Demo

#!/usr/bin/tclsh

regexp {([A-Z,a-z]*).([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
Sub Match2: Tutorial

Ниже показана модифицированная версия приведенного выше кода, показывающая, что подшаблон может содержать несколько шаблонов.

Live Demo

#!/usr/bin/tclsh

regexp {([A-Z,a-z]*.([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

Переключатели для Regex Command

Список переключателей, доступных в Tcl,

  • nocase — используется для игнорирования регистра

  • индексы — Храните расположение совпадающих подшаблонов вместо совпадающих символов.

  • line — Новая строка, чувствительная к совпадению. Игнорирует символы после новой строки.

  • начальный индекс — устанавливает смещение начала шаблона поиска.

  • Отмечает конец выключателей

nocase — используется для игнорирования регистра

индексы — Храните расположение совпадающих подшаблонов вместо совпадающих символов.

line — Новая строка, чувствительная к совпадению. Игнорирует символы после новой строки.

начальный индекс — устанавливает смещение начала шаблона поиска.

Отмечает конец выключателей

В приведенных выше примерах я намеренно использовал [AZ, az] для всех алфавитов, вы можете легко использовать -nocase вместо того, как показано ниже —

Live Demo

#!/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

Другой пример использования переключателей показан ниже —

Live Demo

#!/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"

Когда приведенный выше код выполняется, он дает следующий результат —