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

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

ある文字列同士が同じなのか?異なるのか、ある文字列が一定のパターンに一致するのか?しないのか、ある文字列に特定の文字列が含まれるのか?含まれないのか、そういった事を実現する機能をTera Termマクロは提供しています。

文字列を比較するために用意されているTTLコマンドは3つ。「strcompare」「strmatch」「strscan」です。それぞれ用途が異なるコマンドですので、コマンドごとの特徴と使い方について解説していきます。

スポンサーリンク

strcompare

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

比較の方法

strcompare 文字列1 文字列2

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

  • 文字列1の方が大きい … 1
  • 文字列1と文字列2が一致 … 0
  • 文字列1の方が小さい … -1

strmatch

strmatchはある文字列を正規表現によるパターンマッチに一致するかどうか調べます。

比較の方法

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

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

  • マッチしなかった … 0
  • マッチした … マッチした位置

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

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

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

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

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

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

正規表現も使えます。システム変数 result には先頭から一致したので 1 が格納され、システム変数 matchstr には検索パターンの abcdefg が格納されます。

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

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

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

strscan

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

比較の方法

strscan 文字列 部分文字列

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

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

使い分け

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

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

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

スポンサーリンク

フォローする

スポンサーリンク