ワイルドカード全マッチ(高速版)
なでしこのワイルドカードの全マッチは、複数マッチに対応していないため
今まで
抽出文字列を一つずつ、
マッチしない文字列に置換えしながら反復するなどの処理を書いていました。
配列等でデータが多くなると、時間が掛かるので
試行錯誤して以下のように反復を使わずマッチできました。
●ワイルドカード全マッチ(Sが,PTに) Sの"("&PT&")"を"<match>$1</match>"にワイルドカード置換して"match"のタグ切り出してタグ削除して戻る。
自己のテストでは、従来の置換え方法よりも、倍以上速くなりました。
※追記、この関数は不完全です。
特にパターンに『()』が使えません。
その他、動作検証を行ってないので挙動は詳しく解りません。
●おまけ
どうしても、抽出文字列を得たい時は、
関数外で処理するか、
『\(\)』以外の『()』をエスケープしておき
全マッチ結果に対してエスケープ前のパターンで
再度マッチさせて抽出文字列を抽出します。
関数内での抽出文字列は、ローカル変数となりますので
システム:抽出文字列=抽出文字列
とグローバル変数の抽出文字列に代入するとよいです。
とまあ、自身でも少しやってみたのですが
簡単にはいきませんでした。
検証等もろくに行っておらず
説明がうまくできないのでコードは載せられませんが
どなたか、高速でスッキリ動く全マッチをお願いしますmOm