本サイトはプロモーションを含みます。

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

文字列の比較はTera Termマクロを書く上で基本的な機能のひとつです。

ある文字列同士が同じなのか?異なるのか、ある文字列が一定のパターンに一致するのか?しないのか、ある文字列に特定の文字列が含まれるのか?含まれないのか、そういった事を実現する機能を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 には最初にマッチしたパターンが格納されます。
グループマッチした場合は、システム変数 groupmatchstr1〜groupmatchstr9にグループマッチしたパターンが格納されます。

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

; 検索対象の文字列
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]+)$''

正規表現を()でグループ化した場合は、システム変数 groupmatchstr1〜groupmatchstr9 にマッチしたパターンが格納されます。

システム変数 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を使います。

日本語を検索する場合の注意点

日本語を検索する場合、文字コードを適切に設定しなければ検索ができません。日本語を扱う場合は regexoption コマンドで設定をおこなう必要があります。regexoptionについては以下の記事を参考にしてください。

Tera Termマクロの正規表現で日本語を扱うとき

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)