正規表現テスト
Posted: 2007年11月15日(木) 13:26
最近動きが無いね
http://www.2chab.net/uploader/src/up0053.sbp
↑をインクルードするなりなんなりします
使い方
RegexMatch
マッチ対象文字列とパターン文字列を引数としてC_Matchesクラスのポインタを返します
Match~、SubMatch~という名前のメソッドでマッチ情報を取り出せます
MatchStringとSubMatchStringの戻り値、MatchInfoのMatchStr引数に返される文字列は全て読み取り専用です
細工するならコピーして使ってください
失敗した場合は現状ではNULLを返してます
RegexReplace
マッチ対象文字列とパターン文字列と置換文字列を引数として
パターンマッチ箇所を置換文字列で置き換えた文字列を返します
返される文字列のバッファはmallocで確保してるのでfreeして下さい
失敗したときはNULLを返します
String型で返すように改造するのも良いかもしれません
その場合失敗の判定が面倒そうですが
利用可能な正規表現について
VBScript互換です。オプションは
大文字小文字を区別、複数行テキスト有効、全てのマッチを返す
にしてあります
http://msdn.microsoft.com/library/ja/de ... rences.asp
http://www.2chab.net/uploader/src/up0053.sbp
↑をインクルードするなりなんなりします
コード: 全て選択
#N88BASIC
'機能が使えるかどうかチェック
If RegexAvailable() Then
Print "利用可能"
Else
Print "利用不可能"
End
End If
Print "------------------------------------------"
Print "RegexMatchテスト"
Print
Print "target=ABCDEFGHIJKLMN","pattern=([C-J]{2})([E-M]{2})"
Dim pMatches As *C_Matches,i As Long,j As Long
pMatches = RegexMatch("ABCDEFGHIJKLMN","([C-J]{2})([E-M]{2})")
If pMatches=NULL Then Print "失敗":End
Print "------------------------------------------"
Print "マッチ数",pMatches->MatchCount()
For i=0 To pMatches->MatchCount()-1
Print "------------------------------------------"
Print "インデックス "+Str$(i)
Print "文字列 "+MakeStr(pMatches->MatchString(i))
Print "位置 "+Str$(pMatches->MatchFirst(i))
Print "一致長 "+Str$(pMatches->MatchLength(i))
Print "後方参照"
For j=0 To pMatches->SubMatchCount(i)-1
Print " $"+Str$(j)+"="+MakeStr(pMatches->SubMatchString(i,j))
Next
Next
Delete pMatches
Print "------------------------------------------"
Print "RegexReplace Test"
Print
Print "target=ABCDEFGHIJKLMN","pattern=([C-J]{2})([E-M]{2})","replace=$1$2$2$1"
Print "------------------------------------------"
Dim recive As *Byte
recive = RegexReplace("ABCDEFGHIJKLMN","([C-J]{2})([E-M]{2})","$1$2$2$1")
Print "return="+MakeStr(recive)
free(recive)
RegexMatch
マッチ対象文字列とパターン文字列を引数としてC_Matchesクラスのポインタを返します
Match~、SubMatch~という名前のメソッドでマッチ情報を取り出せます
MatchStringとSubMatchStringの戻り値、MatchInfoのMatchStr引数に返される文字列は全て読み取り専用です
細工するならコピーして使ってください
失敗した場合は現状ではNULLを返してます
RegexReplace
マッチ対象文字列とパターン文字列と置換文字列を引数として
パターンマッチ箇所を置換文字列で置き換えた文字列を返します
返される文字列のバッファはmallocで確保してるのでfreeして下さい
失敗したときはNULLを返します
String型で返すように改造するのも良いかもしれません
その場合失敗の判定が面倒そうですが
利用可能な正規表現について
VBScript互換です。オプションは
大文字小文字を区別、複数行テキスト有効、全てのマッチを返す
にしてあります
http://msdn.microsoft.com/library/ja/de ... rences.asp