ab.com コミュニティ https://www.activebasic.com/forum/ |
|
正規表現テスト https://www.activebasic.com/forum/viewtopic.php?t=2078 |
ページ 1 / 1 |
作成者: | sn*gr [ 2007年11月15日(木) 13:26 ] |
記事の件名: | 正規表現テスト |
最近動きが無いね 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 |
ページ 1 / 1 | 全ての表示時間は UTC+09:00 です |
Powered by phpBB® Forum Software © phpBB Limited https://www.phpbb.com/ |