●正規表現行抽出/全抽出

情報


概要

正規表現行抽出:対象文からパターンを含む"行"を抽出。
正規表現全抽出:対象文からパターンをすべて抽出。
正規表現全抽出2:対象文からパターンをすべて抽出。(マッチしたのが1個の場合も値を返す)

解説

制約あり:
現状ではパターンの先頭・末尾に改行にヒットするような
選択肢([^ ]など)を置くとうまく動作しないので注意してください。

引数

文字列

返り値

正規表現行抽出:パターンを含む"行"(配列)
正規表現全抽出:パターン(配列)

サンプルプログラム

データは『トイレがないよ。ドアがないよ。
ボタンがないよ。コートがないよ。
ベーコンがないよ。トマトがないよ。
ボールがないよ。バットがないよ。』

データから『[ァ-ン]ー[ァ-ン]』で正規表現行抽出して言う。
//ボタンがないよ。コートがないよ。
//ベーコンがないよ。トマトがないよ。
//ボールがないよ。バットがないよ。

データから『[ァ-ン]+ー[ァ-ン]+』で正規表現全抽出して言う。
//コート
//ベーコン
//ボール

//本体

//対象文からパターンを含む行を抽出
●正規表現行抽出(対象文からパターンで)
 正規表現修飾子は『gmk』
 戻値は(対象文&改行)の(『([^\r\n]*』&パターン&『[^\r\n]*)\r\n』)を『\x01$1\x02』で正規表現置換
 戻値は戻値の『\x02[^\x01]*』を『\x02』に正規表現置換
 戻値は戻値の『[^\x02]*\x01』を空に正規表現置換
 戻値を『\x02』で正規表現区切って戻る

//対象文からパターンをすべて抽出
●正規表現全抽出(対象文からパターンで)
 正規表現修飾子は『gmk』
 戻値とは文字列
 戻値は対象文の(『(』&パターン&『)』)を『\x01$1\x02』で正規表現置換
 戻値は戻値の『\x02[^\x01]*』を『\x02』に正規表現置換
 戻値は戻値の『[^\x02]*\x01』を空に正規表現置換
 戻値を『\x02』で正規表現区切って戻る

正規表現全抽出2

従来の「正規表現全抽出」は、マッチしたものが1個以下だと何も返さなかった。
(これは、たぶん「正規表現区切」の仕様によるもの)
そこで「正規表現全抽出2」では、マッチしたものが1個の場合も戻値を返すよう改変した。

本体

//正規表現全抽出2
//2010-01-16
//
//動作:対象文から正規表現パターンでマッチしたものを全て返す
//引数:
//	・対象文から	文字列
//	・パターンで	文字列
//戻値:
//	・パターンにマッチしたもの全てを配列で返す
//
//従来の「正規表現全抽出」は、マッチしたものが1個以下だと何も返さなかった。
//これは、たぶん「正規表現区切」の仕様によるもの。
//「正規表現全抽出2」では、マッチしたものが1個の場合も戻値を返すよう改変。
//

//対象文からパターンをすべて抽出
//マッチした数が1個の場合は戻値を返す
●正規表現全抽出2(対象文からパターンで)
 正規表現修飾子は『gmk』
//マッチした数を計算
 対象文2=対象文
 対象文2=対象文2の『(●)』を『※』に正規表現置換
 対象文2=対象文2のパターンを『●』に正規表現置換
 マッチ数=対象文2で『●』の出現回数
//抽出
 戻値とは文字列
 戻値は対象文の(『(』&パターン&『)』)を『\x01$1\x02』で正規表現置換
 戻値は戻値の『\x02[^\x01]*』を『\x02』に正規表現置換
 戻値は戻値の『[^\x02]*\x01』を空に正規表現置換
//
 マッチ数で条件分岐
  「0」ならば
   それは空
   戻る
  「1」ならば
   戻値の『\x02』を空に正規表現置換して戻る
  違えば
   戻値を『\x02』で正規表現区切って戻る

//テストデータ

パターン=「(.*?)」
本文=「吾輩(わがはい)は猫である。
名前はまだ無い。
どこで生れたかとんと見当(けんとう)がつかぬ。
何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。
吾輩はここで始めて人間というものを見た。
しかもあとで聞くとそれは書生という人間中で一番獰悪(どうあく)な種族であったそうだ。
この書生というのは時々我々を捕(つかま)えて煮(に)て食うという話である。
しかしその当時は何という考もなかったから別段恐しいとも思わなかった。
ただ彼の掌(てのひら)に載せられてスーと持ち上げられた時何だかフワフワした感じがあったばかりである。
掌の上で少し落ちついて書生の顔を見たのがいわゆる人間というものの見始(みはじめ)であろう。
この時妙なものだと思った感じが今でも残っている。
第一毛をもって装飾されべきはずの顔がつるつるしてまるで薬缶(やかん)だ。
その後(ご)猫にもだいぶ逢(あ)ったがこんな片輪(かたわ)には一度も出会(でく)わした事がない。
のみならず顔の真中があまりに突起している。そうしてその穴の中から時々ぷうぷうと煙(けむり)を吹く。
どうも咽(む)せぽくて実に弱った。
これが人間の飲む煙草(たばこ)というものである事はようやくこの頃知った。」

//テストプログラム

表示欄とはメモ
その幅は640
その高さは480

出力文=「」
本文を反復
	出力文=出力文&それ&改行
	それからパターンで正規表現全抽出2
	出力文=出力文&それ&改行
	出力文=出力文&「-------」&改行

表示欄@テキスト=出力文

テスト結果

吾輩(わがはい)は猫である。
(わがはい)
-------
名前はまだ無い。

-------
どこで生れたかとんと見当(けんとう)がつかぬ。
(けんとう)
-------
何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。

-------
吾輩はここで始めて人間というものを見た。

-------
しかもあとで聞くとそれは書生という人間中で一番獰悪(どうあく)な種族であったそうだ。
(どうあく)
-------
この書生というのは時々我々を捕(つかま)えて煮(に)て食うという話である。
(つかま)
(に)
-------
しかしその当時は何という考もなかったから別段恐しいとも思わなかった。

-------
ただ彼の掌(てのひら)に載せられてスーと持ち上げられた時何だかフワフワした感じがあったばかりである。
(てのひら)
-------
掌の上で少し落ちついて書生の顔を見たのがいわゆる人間というものの見始(みはじめ)であろう。
(みはじめ)
-------
この時妙なものだと思った感じが今でも残っている。

-------
第一毛をもって装飾されべきはずの顔がつるつるしてまるで薬缶(やかん)だ。
(やかん)
-------
その後(ご)猫にもだいぶ逢(あ)ったがこんな片輪(かたわ)には一度も出会(でく)わした事がない。
(ご)
(あ)
(かたわ)
(でく)
-------
のみならず顔の真中があまりに突起している。そうしてその穴の中から時々ぷうぷうと煙(けむり)を吹く。
(けむり)
-------
どうも咽(む)せぽくて実に弱った。
(む)
-------
これが人間の飲む煙草(たばこ)というものである事はようやくこの頃知った。
(たばこ)
-------


名前:
コメント:


ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。