reExecute関数

本ページには広告が含まれています。

正規表現検索を行います。

構文
  1. Matches = reExecute( str, Pattern, IgnoreCase, Global )
引数
str 必須
正規表現による検索の対象となる文字列
Pattern 必須
正規表現で使用するパターンを設定
IgnoreCase 省略可
大文字・小文字を区別しない場合はTrue、区別する場合はFalse
Global 省略可
文字列全体を検索する場合はTrue、しない場合はFalse
戻り値
正規表現で検索した結果をMatchesコレクションとして返します。

プログラム

UWSC
//////////////////////////////////////////////////
// 【引数】
//   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

一致したリストへのアクセス

UWSC
FOR n = 0 TO Matches.Count - 1
	PRINT Matches.Item(n).Value
NEXT

MatchesはCOMコレクション(Countプロパティで要素数を取得でき、Itemメソッドまたはプロパティで単一オブジェクトを取得できるもの)なので、FOR-IN-NEXTでもアクセスできます。

UWSC
FOR Match IN Matches
	PRINT Match.Value
NEXT

後方参照

UWSC
DIM Matches = reExecute("2024-07-29", "(\d{4})-(\d{2})-(\d{2})")

WITH Matches.Item(0)
	PRINT .SubMatches(0)
	PRINT .SubMatches(1)
	PRINT .SubMatches(2)
ENDWITH

名前付きキャプチャ

RegExpオブジェクトは名前付きキャプチャをサポートしていないため、PowerShellなど他のツールで代用します。

$regex = [regex]::new("(?<name>\w+)")
$matches = $regex.Match("example")
$matches.Groups["name"].Value

使い方

マッチしたすべての数値に1を加算して書き換えます。

UWSC
DIM str = "私は20歳で、妹は15歳です。"

DIM re = CREATEOLEOBJ("VBScript.RegExp")
re.Pattern = "(\d+)"
re.IgnoreCase = TRUE
re.Global = TRUE
DIM Matches = re.Execute(str)

FOR n = 0 TO Matches.Count - 1
	num = Matches.Item(n).Value
	str = REPLACE(str, num, VAL(num) + 1)
NEXT

PRINT str
結果
プレーンテキスト
私は21歳で、妹は16歳です。

プログラム実行例

サービスをすべて取得し、そのサービスをユーザーが開始・停止できるかどうかをブール値で返す

UWSC
DIM Shell = CREATEOLEOBJ("Shell.Application")
DIM str = DOSCMD("sc query state=all | findstr /B <#DBL>SERVICE_NAME:<#DBL>")
DIM Matches = reExecute(str, "SERVICE_NAME: (.*?)\r\n")
DIM services[Matches.Count]

FOR n = 0 TO Matches.Count - 1
	DIM service = Matches.Item(n).SubMatches(0)
	services[n] = service + ":" + Shell.CanStartStopService(service)
NEXT

QSORT(services, QSRT_UNICODEA)

FOR service IN services
	PRINT service
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
結果
CSV
AarSvc_6b8fd:False
AdobeARMservice:False
AJRouter:False
ALG:False
ALUpdateService:False
AppHostSvc:False
AppIDSvc:False
Appinfo:False
AppReadiness:False
AppXSvc:False
aspnet_state:False
AudioEndpointBuilder:False
Audiosrv:False
autotimesvc:False
AxInstSV:False
BcastDVRUserService_6b8fd:False
BDESVC:False
BFE:False
BITS:False
BluetoothUserService_6b8fd:False
Bonjour Service:False
BootRacerServ:False
BrokerInfrastructure:False
BTAGService:False
BthAvctpSvc:False
bthserv:False
camsvc:False
CaptureService_6b8fd:False
cbdhsvc_6b8fd:False
CDPSvc:False
CDPUserSvc_6b8fd:False
CertPropSvc:False
chromoting:False
CLHNService:False
ClipSVC:False
COMSysApp:False
ConsentUxUserSvc_6b8fd:False
CoreMessagingRegistrar:False
cphs:False
CredentialEnrollmentManagerUserSvc_6b8fd:False
CryptSvc:False
CypherGuard cguard Service 32bit Edition:False
CypherGuard cguard Service 64bit Edition:False
CypherGuard Info Service:False
dbupdate:False
dbupdatem:False
DbxSvc:False
DcomLaunch:False
dcsvc:False
defragsvc:False
DeviceAssociationBrokerSvc_6b8fd:False
DeviceAssociationService:False
DeviceInstall:False
DevicePickerUserSvc_6b8fd:False
DevicesFlowUserSvc_6b8fd:False
DevQueryBroker:False
Dhcp:False
diagnosticshub.standardcollector.service:False
diagsvc:False
DiagTrack:False
DispBrokerDesktopSvc:False
DisplayEnhancementService:False
DmEnrollmentSvc:False
dmwappushservice:False
Dnscache:False
DoSvc:False
dot3svc:False
DPS:False
DSDFunctionKeyCtlService:False
DSDTabletControlService:False
DSDWirelessLEDCtlService:False
DsmSvc:False
DsSvc:False
DusmSvc:False
dynabookSettingService:False
Eaphost:False
edgeupdate:False
edgeupdatem:False
EFS:False
embeddedmode:False
EntAppSvc:False
EventLog:False
EventSystem:False
Everything:False
Fax:False
fdPHost:False
FDResPub:False
fhsvc:False
FolderSize:False
FontCache:False
FontCache3.0.0.0:False
FrameServer:False
Freemake Improver:False
FreemakeVideoCapture:False
GoogleChromeElevationService:False
GoogleIMEJaCacheService:False
gpsvc:False
GraphicsPerfSvc:False
gupdate:False
gupdatem:False
hidserv:False
HvHost:False
icssvc:False
IDriverT:False
IKEEXT:False
ImeDictUpdateService:False
InstallService:False
iphlpsvc:False
IpxlatCfgSvc:False
KeyIso:False
KtmRm:False
LanmanServer:False
LanmanWorkstation:False
lfsvc:False
LicenseManager:False
LLHDClient:False
LLHDCloader:False
lltdsvc:False
lmhosts:False
LMS:False
LSM:False
LxpSvc:False
MapsBroker:False
McpManagementService:False
MessagingService_6b8fd:False
MicrosoftEdgeElevationService:False
MixedRealityOpenXRSvc:False
MozillaMaintenance:False
mpssvc:False
MSDTC:False
MSiSCSI:False
msiserver:False
MSMQ:False
MSSQL$SQLEXPRESS:False
MSSQLServerADHelper100:False
NaturalAuthentication:False
NcaSvc:False
NcbService:False
NcdAutoSetup:False
Netlogon:False
Netman:False
NetMsmqActivator:False
NetPipeActivator:False
netprofm:False
NetSetupSvc:False
NetTcpActivator:False
NetTcpPortSharing:False
NgcCtnrSvc:False
NgcSvc:False
NielsenUpdate:True
NlaSvc:False
nsi:False
nurago InstallUpdate:False
nurago NetworkMeter:False
nurago Reporting Service:False
OneSyncSvc_6b8fd:False
ose64:False
osppsvc:False
p2pimsvc:False
p2psvc:False
PcaSvc:False
perceptionsimulation:False
PerfHost:False
PhoneSvc:False
PimIndexMaintenanceSvc_6b8fd:False
pla:False
PlugPlay:False
PNRPAutoReg:False
PNRPsvc:False
PolicyAgent:False
Power:False
PrintNotify:False
PrintWorkflowUserSvc_6b8fd:False
ProfSvc:False
PushToInstall:False
QWAVE:False
RasAuto:False
RasMan:False
RemoteAccess:False
RemoteRegistry:False
RetailDemo:False
RmSvc:False
RpcEptMapper:False
RpcLocator:False
RpcSs:False
SamSs:False
SCardSvr:False
ScDeviceEnum:False
Schedule:False
SCPolicySvc:False
SDRSVC:False
seclogon:False
SecurityHealthService:False
SEMgrSvc:False
SENS:False
SensorDataService:False
SensorService:False
SensrSvc:False
SessionEnv:False
SgrmBroker:False
SharedAccess:False
SharedRealitySvc:False
ShellHWDetection:False
shpamsvc:False
smphost:False
SmsRouter:False
SNMPTRAP:False
spectrum:False
Spooler:False
sppsvc:False
SQLAgent$SQLEXPRESS:False
SQLBrowser:False
SQLWriter:False
SSDPSRV:False
ssh-agent:False
SstpSvc:False
StateRepository:False
stisvc:False
StorSvc:False
svsvc:False
swprv:False
SynTPEnhService:False
SysMain:False
SystemEventsBroker:False
SystemExplorerHelpService:False
TabletInputService:False
TapiSrv:False
TermService:False
Themes:False
TieringEngineService:False
TimeBrokerSvc:False
TMachInfo:False
TODDSrv:False
TokenBroker:False
TosCoSrv:False
TOSHIBA HDD SSD Alert Service:False
TPCHSrv:False
TrkWks:False
TroubleshootingSvc:False
TrustedInstaller:False
tzautoupdate:False
UdkUserSvc_6b8fd:False
uhssvc:False
UmRdpService:False
UnistoreSvc_6b8fd:False
UNS:False
upnphost:False
UserDataSvc_6b8fd:False
UserManager:False
UsoSvc:False
VacSvc:False
VaultSvc:False
vds:False
vmicguestinterface:False
vmicheartbeat:False
vmickvpexchange:False
vmicrdv:False
vmicshutdown:False
vmictimesync:False
vmicvmsession:False
vmicvss:False
vncserver:False
VSS:False
VSStandardCollectorService150:False
W32Time:False
w3logsvc:False
W3SVC:False
WaaSMedicSvc:False
WalletService:False
WarpJITSvc:False
WAS:False
wbengine:False
WbioSrvc:False
Wcmsvc:False
wcncsvc:False
WdiServiceHost:False
WdiSystemHost:False
WdNisSvc:False
WebClient:False
Wecsvc:False
WEPHOSTSVC:False
wercplsupport:False
WerSvc:False
WFDSConMgrSvc:False
WiaRpc:False
WinDefend:False
WinHttpAutoProxySvc:False
Winmgmt:False
WinRM:False
wisvc:False
WlanSvc:False
wlidsvc:False
wlpasvc:False
WManSvc:False
wmiApSrv:False
WMPNetworkSvc:False
workfolderssvc:False
WpcMonSvc:False
WPDBusEnum:False
WpnService:False
WpnUserService_6b8fd:False
wscsvc:False
WSearch:False
wuauserv:False
WwanSvc:False
XblAuthManager:False
XblGameSave:False
XboxGipSvc:False
XboxNetApiSvc:False
使用関数

指定期間に受信したメールからURLを抽出(Outlook)

UWSC
HASHTBL url = HASH_SORT

CONST olFolderInbox = 6

DIM Outlook = CREATEOLEOBJ("Outlook.Application")
DIM NameSpace = Outlook.GetNameSpace("MAPI")
DIM Folder = NameSpace.GetDefaultFolder(olFolderInbox)
DIM Items = Folder.Items

DIM start = "2021/01/01"
DIM end = "2021/01/07"

Items = Items.Restrict("[ReceivedTime] >= '" + start + "' AND [ReceivedTime] <= '" + end + "'")

DIM row = 1

FOR MailItem IN Items
	FUKIDASI(row + "/" + Items.Count)
	DIM Matches = reExecute(MailItem.Body, "https?://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?")
	FOR Match IN Matches
		url[Match.Value] = url[Match.Value] + 1
	NEXT
	row = row + 1
NEXT

FOR i = 0 TO LENGTH(url) - 1
	FUKIDASI(i + "/" + (LENGTH(url) - 1))
	PRINT url[i, HASH_KEY]
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
使用関数
解説

接続中の無線LAN情報を取得

連想配列に代入した後にすべて出力していますが、必要な項目だけ取得する場合はLAN["SSID"]のように指定します。

UWSC
HASHTBL LAN

DIM str = DOSCMD("netsh wlan show interface")
DIM Matches = reExecute(str, "\s*?((?=\S).*?)\s*? : \s*?(.*?)\s*?\n")

FOR i = 0 TO Matches.Count - 1
	WITH Matches.Item(i)
		LAN[.SubMatches(0)] = .SubMatches(1)
	ENDWITH
NEXT

FOR i = 0 TO LENGTH(LAN) - 1
	PRINT LAN[i, HASH_KEY] + "," + LAN[i, HASH_VAL]
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
結果
接続時
CSV
名前,                 Wi-Fi
説明,                 Intel(R) WiFi Link 5100 AGN
GUID,                 ********-****-****-****-************
物理アドレス,         **:**:**:**:**:** 
状態,                 接続されました
SSID,                 ************-**
BSSID,                **:**:**:**:**:**
ネットワークの種類,   インフラストラクチャ
無線の種類,           802.11g
認証,                 WPA2-パーソナル
暗号,                 CCMP
接続モード,           プロファイル
チャネル,             6
受信速度 (Mbps),      144
送信速度 (Mbps),      144
シグナル,             99%
プロファイル,         ************-**
未接続時
CSV
名前,           Wi-Fi
説明,           Intel(R) WiFi Link 5100 AGN
GUID,           ********-****-****-****-************
物理アドレス,   **:**:**:**:**:**
状態,           切断されました
無線の状態,     ハードウェア オン
使用関数

設定したことのあるWi-Fi のプロファイル名(SSID)を取得

UWSC
HASHTBL LAN

DIM str = DOSCMD("netsh wlan show profile")
DIM Matches = reExecute(str, "\s*? : (.*?)\n")

DIM array[-1]

FOR i = 0 TO Matches.Count - 1
	arrayPush(array, Matches.Item(i).SubMatches(0))
NEXT

FOR i = 0 TO UBound(array)
	PRINT array[i]
NEXT

//////////////////////////////////////////////////
// 【引数】
//   array : 要素を追加する配列(参照引数) 
//   values : 追加する要素をvalue1から指定 
// 【戻り値】
//   処理後の配列の要素の数 
//////////////////////////////////////////////////
FUNCTION arrayPush(var array[], value1 = EMPTY, value2 = EMPTY, value3 = EMPTY, value4 = EMPTY, value5 = EMPTY, value6 = EMPTY, value7 = EMPTY, value8 = EMPTY, value9 = EMPTY, value10 = EMPTY, value11 = EMPTY, value12 = EMPTY, value13 = EMPTY, value14 = EMPTY, value15 = EMPTY, value16 = EMPTY)
    DIM i = 1
    WHILE EVAL("value" + i) <> EMPTY
	  DIM res = RESIZE(array, UBound(array) + 1)
	  array[res] = EVAL("value" + i)
	  i = i + 1
	WEND
	RESULT = LENGTH(array)
FEND

//////////////////////////////////////////////////
// 【引数】
//   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

//////////////////////////////////////////////////
// 【引数】
//   inputs : 繰り返す文字列 
//   multiplier : inputsを繰り返す回数 
// 【戻り値】
//   inputsをmultiplier回を繰り返した文字列を返します 
//////////////////////////////////////////////////
FUNCTION strRepeat(inputs, multiplier)
	DIM res = ""
	FOR n = 1 TO multiplier
		res = res + inputs
	NEXT
	RESULT = res
FEND

//////////////////////////////////////////////////
// 【引数】
//   arrayname : 上限値を求める配列の名前 
//   dimension : 返す次元を示す整数 
// 【戻り値】
//   配列の上限値 
//////////////////////////////////////////////////
FUNCTION UBound(arrayname[], dimension = 1)
	RESULT = EVAL("RESIZE(arrayname" + strRepeat("[0]", dimension - 1) + ")")
FEND
結果
プレーンテキスト
************-2G
aterm-******-g
Buffalo-G-****
auhome_******
aterm-******-g
FON_FREE_INTERNET
使用関数

接続したことあるWi-FiのSSIDとパスワードを取得

UWSC
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
使用関数

参考文献

  1. Rubular: a Ruby regular expression editor
  2. Regexper

関連記事

isDate関数 (自作関数)
引数に指定した値が日付として認識できる場合はTrueを返します。認識できない場合はFalseを返します。
reReplace関数 (自作関数)
正規表現置換を行います。
reTest関数 (自作関数)
マッチングを行い、マッチしたかどうかを真偽値で返します。
RegExp オブジェクト