スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Lazarusで正規表現(3)

前回、日本語が入った文字列を対象に正規表現のテストをして検索して失敗したことで、しばらく諦めてたんですが、もう一回やって見ることにしました。

誤解のないように書いておきます。前回使わせてもらったSkRegExpが悪いんじゃなく、Lazarusでコンパイルを通すために自分でいじった処置が間違っていたわけで。

Lazarus 正規表現
delphi/外部ライブラリ - PukiWiki Plus!:[2012/05/02]

EXE以外にDLLが必要な構成があまり好きじゃないけど、諦めるかなぁと思ってみたり。

>DelWiki - コンポーネント/TRegExpr
リンクが切れてるんですけど、コンポーネントかということで、Lazarus TRegExprで検索してみました。

Free Pascal - General - Which regex unit to use?:[2012/05/02]
> * /packages/regexpr/src/regexp.pp
> * /components/synedit/synregexpr.pas
> * /packages/regexpr/src/old/regexpr.pp
> * TRegExpr (no idea what is latest and if FPC compatible)

あれ?そもそもLazarusって正規表現できるっぽい?

というわけで探してみると、regexpr.pasがちゃんとインストールされていました。

使い方がわからないので、再びGoogle。作ってる人(グループ?)のサイトがあって、ヘルプがおいてありました。

Regular expressions,RegExp,Delphi,Pascal,FreePascal,Kylix,Libraries,VCL,CLX,Tools,files utils,math,string utils,parsers
RegExp Studio:[2012/05/02]

たまにDemosフォルダ参照、という記述があるので、Lazarusのインストールフォルダを探してみたけれど見つからない。すでにインストールされているバージョンと同じなんだけども、改めてダウンロードしてみたら、その中にDemosフォルダが入ってました。

すでにLazarusにはインストールされているので、usesにRegExprを追加して

//RegExpr
//http://www.lazarus.freepascal.org/index.php?topic=16433.0
procedure ExtractEmail3(const AInputString: string; AStrings: TStrings);
var
LRegBuf: TRegExpr;
i: Integer;
begin
AStrings.Clear;
LRegBuf := TRegExpr.Create();
try
LRegBuf.Expression
:= '[_a-zA-Z\d\-\.]+@[_a-zA-Z\d\-]+(\.[_a-zA-Z\d\-]+)+';
if LRegBuf.Exec(AInputString) then
repeat
AStrings.Append(LRegBuf.Match[0]);
until not LRegBuf.ExecNext;
finally
LRegBuf.Free();
end;
end;


日本語まじりの文字列からメールアドレスを抜いてみました。



いけてます。ただ、たまたま「あ」だから成功したのかもしれない疑惑が湧いてきます。じゃぁ使いそうな日本語の文字でメールアドレス挟んでみよかと。

Kan君:[2012/05/02]

この辞書ファイルの「KANJI.DAT」の漢字部分だけを抜き出してひらがなとカタカナを付け加えて、OpenOfficeのCalcでメールアドレスを挟んでこんなテストデータを作ってみました。

(略)
鴫lazarus@free.net鴫
鴒lazarus@free.net鴒
鴣lazarus@free.net鴣
鴪lazarus@free.net鴪
鴦lazarus@free.net鴦
(略)


6507行になりました。



結果をもっかいCalcに貼り付けて並べ替えて...
うまく行ってるようです。文字コードもなんにも気にしてないんですけど、その程度でしか使わないだろうからとりあえず個人的には問題なさそうです。

よかった。
関連記事
スポンサーサイト
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。