Tcl-tk-tcl-regular-expressions
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