Учебники

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"

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