Contents
- 構文
- Matches = reExecute( str, Pattern, [IgnoreCase, Global] )
- 引数
- str
- 正規表現による検索の対象となる文字列
- Pattern
- 正規表現で使用するパターンを設定
- IgnoreCase
- 大文字・小文字を区別しない場合はTrue、区別する場合はFalse
- Global
- 文字列全体を検索する場合はTrue、しない場合はFalse
- 戻値
- 正規表現で検索した結果をMatchesコレクションとして返します。
プログラム
//////////////////////////////////////////////////
// 【引数】
// str : 正規表現による検索の対象となる文字列
// Pattern : 正規表現で使用するパターンを設定
// IgnoreCase : 大文字・小文字を区別しない場合はTrue、区別する場合はFalse
// Global : 文字列全体を検索する場合はTrue、しない場合はFalse
// 【戻値】
// 正規表現で検索した結果をMatchesコレクションとして返します。
//////////////////////////////////////////////////
FUNCTION reExecute(str, Pattern, IgnoreCase = TRUE, Global = TRUE)
DIM re = CREATEOLEOBJ("VBScript.RegExp")
re.Pattern = Pattern
re.IgnoreCase = IgnoreCase
re.Global = Global
RESULT = re.Execute(str)
FEND
一致リストの取得
指定した範囲の整数
以下は、0〜255の範囲にある整数にマッチする正規表現です。
DIM Matches = reExecute(str, "\b([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\b")
- \b([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\b
- 0〜99の数値
- \b([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\b
- 100〜199の数値
- \b([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\b
- 200〜249の数値
- \b([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\b
- 250〜255の数値
- \b([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\b
- 0〜99、100〜199、200〜249、または250〜255の数値。
URL
DIM Matches = reExecute(str, "https?://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?")
メールアドレス
受信したメールの本文から抽出するときなどに。
DIM Matches = reExecute(str, "[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*")
郵便番号
DIM Matches = reExecute(str, "\d{3}-\d{4}")
- \d{3}-\d{4}
- 3桁の数字
- \d{3}-\d{4}
- 4桁の数字
日付(Y/M/D形式)
日付の正規表現です。あくまで月が1~12、日が1~31の範囲であることだけを確認しているので、06/31など存在しない日付にもマッチします。
DIM Matches = reExecute(str, "[0-9]{,4}/(0?[1-9]|1[0-2])/(0?[1-9]|[12][0-9]|3[01])")
- [0-9]{,4}/(0?[1-9]|1[0-2])/(0?[1-9]|[12][0-9]|3[01])
- 4桁以下の数字
- [0-9]{,4}/(0?[1-9]|1[0-2])/(0?[1-9]|[12][0-9]|3[01])
- 1~12の数字。先頭の0埋めはあってもなくても良い。
- [0-9]{,4}/(0?[1-9]|1[0-2])/(0?[1-9]|[12][0-9]|3[01])
- 1~31の数字。先頭の0埋めはあってもなくても良い。
日付(YMD形式)
厳密に日付をチェックするには以下を使います。
DIM Matches = reExecute(str, "(?!([02468][1235679]|[13579][01345789])000229)(([0-9]{4}(01|03|05|07|08|10|12)(0[1-9]|[12][0-9]|3[01]))|([0-9]{4}(04|06|09|11)(0[1-9]|[12][0-9]|30))|([0-9]{4}02(0[1-9]|1[0-9]|2[0-8]))|([0-9]{2}([02468][048]|[13579][26])0229))")
携帯電話番号(070、080、090から始まる11桁の番号)
070-0・080-0・090-0から始まる番号は存在しないので除外。
DIM Matches = reExecute(str, ""0[789]0-[1-9]d{3}-d{4}"")
フリーダイヤル(0120-000-000、0800-000-0000)
DIM Matches = reExecute(str, "0(?:120-\d{3}-\d{2}|800-\d{3}-\d{3})0")
IP電話(050から始まる11桁の番号)
DIM Matches = reExecute(str, "050-\d{4}-\d{4}")
IPアドレス
IPアドレスは「xxx.xxx.xxx.xxx」形式で表されます。x=0~255の値。
DIM Matches = reExecute(str, "(([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])")
- (([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])
- 0~99の数値
- (([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])
- 100~199の数値
- (([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])
- 200〜249の数値
- (([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])
- 250〜255の数値
- (([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])
- 250〜255 or 200〜249 or 100〜199 or 0〜99なので0〜255
- (([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])
- 「0〜255.」を3回繰り返し。
- (([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])
- 0〜255の数値
英数字
DIM Matches = reExecute(str, "[A-Za-z0-9]+")
一致したリストへのアクセス
FOR n = 0 TO Matches.Count – 1
PRINT Matches.Item(n).Value
NEXT
MatchesはCOMコレクション(Countプロパティで要素数を取得でき、Itemメソッドまたはプロパティで単一オブジェクトを取得できるもの)なので、FOR-IN-NEXTでもアクセスできます。
FOR Match IN Matches
PRINT Match.Value
NEXT
プログラム実行例
接続したことあるWi-FiのSSIDとパスワードを取得
DIM str = DOSCMD("netsh wlan show networks")
DIM Matches_SSID = reExecute(str, "SSID \d+ : (.*?)\r\n")
FOR n = 0 TO Matches_SSID.Count - 1
DIM SSID = Matches_SSID.Item(n).SubMatches(0)
str = DOSCMD("netsh wlan show profiles name=" + SSID + " key=clear")
PRINT "SSID<#TAB><#TAB>" + SSID
Matches_Pass = reExecute(str, "主要なコンテンツ : (.*?)\r\n")
IFB Matches_Pass.Count <> 0 THEN
PRINT "パスワード<#TAB>" + Matches_Pass.Item(0).SubMatches(0)
ELSE
PRINT "パスワード<#TAB>"
ENDIF
PRINT "-----"
NEXT
//////////////////////////////////////////////////
// 【引数】
// str : 正規表現による検索の対象となる文字列
// Pattern : 正規表現で使用するパターンを設定
// IgnoreCase : 大文字・小文字を区別しない場合はTrue、区別する場合はFalse
// Global : 文字列全体を検索する場合はTrue、しない場合はFalse
// 【戻値】
// 正規表現で検索した結果をMatchesコレクションとして返します。
//////////////////////////////////////////////////
FUNCTION reExecute(str, Pattern, IgnoreCase = TRUE, Global = TRUE)
DIM re = CREATEOLEOBJ("VBScript.RegExp")
re.Pattern = Pattern
re.IgnoreCase = IgnoreCase
re.Global = Global
RESULT = re.Execute(str)
FEND
- 参考文献
- 正規表現
この記事は役に立ちましたか?