スクリプトプリクス トップ >> HSP3 >> HSP3の正規表現(RegExp)を使った置換および検索モジュール

HSP3の正規表現(RegExp)を使った置換および検索モジュール

スポンサーリンク

今回は、「正規表現(RegExp)を使った置換および検索モジュール」です。

作った検索モジュールがまったく同じカテゴリーのモジュールだったので、一部のコードを、HSP3ラウンジ掲示板から拝借しておりますことを先にお詫び申し上げます。(出自は明記してあります。)

私がHSP3で作っているプログラムは、自分で使うツール系が中心です。

ツール系を作っていると、文字列を一気に置換したり検索したりという操作がしたくなってきます。


HSP単体では命令が無いんですよね…(^^;

HSPでプログラムをはじめたころ(といっても数ヶ月前ですが…)
サンプルを見てプログラムに組み込んでいました、
その後正規表現を調べるためにネットで検索して
検索結果の掲示板(HSP3ラウンジ掲示板ですが)を見ると、
「ぷま」さんがモジュールを作られていたので、
ありがたく使わせていただいておりました。

一度は特殊文字で引っかかって悩んだことがありましたが、
このモジュールは今も頻繁に使わせていただいております。


検索モジュールは、文字列の中でマッチしたものがあるか?
個数はいくつか?というのを調べて条件分けしたくなり作ったものです。

HSP3ラウンジ掲示板の投稿ルールには、
「著作権を主張するなら掲示板に書き込まないように」
という一文があるので、
プログラムに組み込んだりして使われるのは
自由に行っていただいて問題無いと思います。

ただ、私の書いたものでないコードも含まれているので、
モジュールのみの再配布などはしないようにお願いします。m(__)m

/*******************************************************************

■■ 正規表現(RegExp)を使った置換および検索モジュール ■■

*******************************************************************/


#module
#deffunc Replace var buf, var pattern, var repstr,int p1
newcom oReg, "VBScript.RegExp"
comres buf
oReg("Pattern")= pattern
if (p1=null | p1!1) : oReg("Global")= 1
if p1=1 : oReg("Global")= 0;0=1回 1=全体
oReg->"Replace" buf, repstr
delcom oReg
return

#deffunc Match var buf, var pattern
newcom oReg, "VBScript.RegExp"
comres result
oReg("Pattern")= pattern
oReg("Global")= 1
oReg->"Execute" buf
oMatches=result
rt = oMatches("Count")
if(rt>0){
repeat rt
oMatch=oMatches("Item",cnt)
Matchdata.0 = oMatch("Value")
Matchdata.1 += Matchdata.0
Matchdata.0 = ""
loop
buf = Matchdata.1
delcom oMatch
delcom oMatches
}
delcom oReg
delcom result
return rt
#global


teststr="abcdefgh \\\\\\ a pen."
testptn="\\\\"
repstr= "\*"
mes "対象文字 \""+teststr+"\""
mes "検索文字 \""+testptn+"\""
mes "置換文字 \""+repstr+"\""

strcopy = teststr

Replace strcopy, testptn, repstr

mes "置換結果 \""+strcopy+"\""

strcopy =""
strcopy = teststr

Match strcopy, testptn

mes "検索結果 \""+stat+" : "+strcopy+"\""

mes "ファイルパスなどの\\マークは\\が\\\\という形で二つで一つにみなされるので、\n(特殊文字の問題)置換や検索するときには気をつけましょう。\n"
mes "置換を使って削除する方法"

teststr="12345abccccfh"
testptn="c"
repstr= ""

mes "対象文字 \""+teststr+"\""
mes "検索文字 \""+testptn+"\""
mes "置換文字 \""+repstr+"\""

strcopy =""
strcopy = teststr

repeat 2
Replace strcopy, testptn, repstr,1
loop

mes "置換結果 \""+strcopy+"\""


/*******************************************************************

■ 正規表現(RegExp)を使った置換モジュール(by ぷまさん)(拡張 by シモン)
上のReplaceモジュールは、「HSPラウンジ掲示板」で「2007/07/03(火) 17:17:58」に"http://fs-cgi-basic01.freespace.jp/~hsp/ver3/hsp3.cgi?print+200707/07070001.txt"の質問に答えて投稿されたものを拡張しました。

Replace 「対象の文字列型変数」, 「置換前文字列型変数」, 「置換する文字列型変数」,「置換対象、省略=全体、1=1回」

結果は、「対象の文字列型変数」にそのまま入ります。
元の変数が変わってしまうので、元の変数の値が必要な場合はコピーして使うこと。


■ 正規表現(RegExp)を使った検索モジュール(by シモン)

Match 「対象の文字列型変数」, 「検索する文字列型変数」

結果は、マッチした文字列が「対象の文字列型変数」にそのまま入ります。
検索した結果マッチが無かった場合には、「対象の文字列型変数」は元のままです。

stat : 戻り値
----------------------------------------------------
0   : マッチしなかった。
1以上 : マッチした数


上と同様に元の変数が変わってしまうので、元の変数の値が必要な場合は元の変数をコピーしてから使うこと。

*******************************************************************/


いろんなフリーのモジュールを使って制限無く良いものを作りたいですね。



スポンサーリンク
posted by シモン at 23:56 | Comment(0) | TrackBack(0) | HSP3
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。