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