reExecute

構文
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
参考文献
正規表現

この記事は役に立ちましたか?
役に立った 役に立たなかった