見出し画像

Tera Termマクロで文字列が一致するか調べる方法


文字列を比較するために用意されているTTLコマンドは3つあります。

  • strcompare

  • strmatch

  • strscan

それぞれ用途が異なるコマンドですので、コマンドごとの特徴と使い方について解説していきます。

strcompare

strcompareは2つの文字列を符号なし整数のバイト列とみなして比較します。文字列を大小関係で比較するため、文字列が同一であるか確認するために使います。

比較の方法

strcompare 文字列1 文字列2

strcompareを実行すると比較結果がシステム変数 result に入ります。

  • 文字列1の方が大きい … 1

  • 文字列1と文字列2が一致 … 0

  • 文字列1の方が小さい … -1

; 検索対象の文字列
string1 = 'abcdefg'

; result = 1
strcompare string1 'abc'

; result = -1
strcompare string1 'xyz'

; result = 0
strcompare string1 'abcdefg'

strmatch

strmatchはある文字列が含まれるか部分一致で比較することができます。また正規表現を使うことができます。

比較の方法

strmatch 検索対象の文字列 検索文字列(正規表現)

strmatchを実行すると結果がシステム変数 result に入ります。

  • マッチしなかった … 0

  • マッチした … マッチした位置

システム変数 matchstr には最初にマッチしたパターンが格納されます。 グループマッチした場合は、システム変数 groupmatchstr1groupmatchstr9にグループマッチしたパターンが格納されます。

パターンマッチ例 ①部分一致

; 検索対象の文字列
string = 'abcdefg'

; result = 3
; matchstr = 'cde'
strmatch string 'cde'

検索文字列 cde は先頭から3オクテット目のため、システム変数 result にはマッチした場所として「3」が格納されます。またシステム変数 matchstr には検索パターンの「cde」が格納されます。

パターンマッチ例 ②完全一致

; 検索対象の文字列
string = 'abcdefg'

; result = 1
; matchstr = 'abcdefg'
strmatch string 'abcedef'

完全一致している場合は先頭から一致したのでシステム変数 result には「1」が格納され、システム変数 matchstr には検索パターンの「abcdefg」が格納されます。

パターンマッチ例 ③正規表現

; 検索対象の文字列
string = 'abcdefg'

; result = 1
; matchstr = 'abcdefg'
strmatch string '^a[a-z]+g$'

この場合、システム変数 result には先頭から一致したので「1」が格納され、システム変数 matchstr には検索パターンの「abcdefg」が格納されます。

パターンマッチ例 ④グループマッチ

; 検索対象の文字列
string = '192.168.2.1'

; result = 1
; matchstr = 192.168.2.1
; groupmatchstr1 = 192
; groupmatchstr2 = 168
; groupmatchstr3 = 2
; groupmatchstr4 = 1
strmatch string '^([0-9]+).([0-9]+).([0-9]+).([0-9]+)$''

正規表現を「()」でグループ化した場合は、システム変数 groupmatchstr1groupmatchstr9 にマッチしたパターンが格納されます。 システム変数 result には先頭から一致したので「1」が格納され、システム変数 matchstr には「192.168.2.1」が格納されます。

strscan

strscanはある文字列に特定の文字列が含まれているのか調べます。正規表現は使えません。

比較の方法

strscan 文字列 部分文字列

文字列の中に部分文字列が含まれているのか調べます。部分文字列が含まれていると、システム変数resultにその位置が格納されます。含まれていない場合はシステム変数resultに「0」が格納されます。

str = 'abcdefg'
substr = 'c'

; result = 3
strscan str substr

次のように文字列に部分文字列が含まれない場合はシステム変数resultに「0」が格納されます。

str = 'abcdefg'
substr = 'x'

; result = 0
strscan str substr

使い分け

まとめると、文字列同士が同一なのか調べたいときはstrcompareを使います。文字列があるパターンに一致するのか調べたい、グループマッチにより特定の範囲を切り出したいときはstrmatchを使います。特定の文字や文字列が含まれるのか、どの位置にマッチするのか調べたいときはstrscanを使います。

この記事が気に入ったらサポートをしてみませんか?