Tcl-tk-tcl-regular-expressions

提供:Dev Guides
移動先:案内検索

Tcl-正規表現

「regexp」コマンドは、Tclの正規表現と一致するために使用されます。 正規表現は、検索パターンを含む一連の文字です。 複数のルールで構成されており、次の表でこれらのルールと対応する使用法を説明します。

Sr.No. Rule & Description
1

x

完全に一致。

2

[a-z]

a〜zの小文字。

3

.

任意のキャラクター。

4

^

開始文字列は一致する必要があります。

5

$

終了文字列は一致する必要があります。

6

\^

特殊文字^と一致するバックラッシュシーケンス。同様に、他の文字に使用できます。

7

()

上記のシーケンスを括弧内に追加して、正規表現を作成します。

8

x*

先行するxの0回以上の出現に一致する必要があります。

9

xPLUS

先行するxの1回以上の出現に一致する必要があります。

10

[a-z]?

先行するxの0または1回の出現に一致する必要があります。

11

{digit}

前の正規表現の数字と正確に一致します。 0-9を含む数字。

12

\{digit,}

前の正規表現の3桁以上の出現に一致します。 0-9を含む数字。

13

\{digit1,digit2}

Occurrencesは、前の正規表現の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 -新しい行依存のマッチング。 改行の後の文字を無視します。
  • 開始インデックス-検索パターンの開始のオフセットを設定します。
  • スイッチの終わりを示します

上記の例では、すべてのアルファベットに対して[A-Z、a-z]を意図的に使用しましたが、以下に示すように-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