読者です 読者をやめる 読者になる 読者になる

正規表現(7)

その他 その他-正規表現について
(〜) グループ化と後方参照


メタ文字 ( )には、2つの用途があります。

1つ目は、( )で囲んだ文字列をひとまとめにして取り扱う用途で使用します。例えば、

(hoge1)+


と書くと、hoge1という5文字の文字列が、1回以上ある、という意味になります。
hoge1hoge1hoge1hoge1hoge1hoge1、といったテキストと一致する表現です。

hoge1+


( )を付けずに書くと、+1のみにかかることになり、hoge1hoge11hoge111、といったテキストと一致する表現になります。

( )の中には、普通の文字でもメタ文字でもなんでも入れることができます。

(例1)

f:id:four_or_three:20160628233652p:plain:w250

(例2)

f:id:four_or_three:20160628233858p:plain:w250

(..)+という部分を見てみます。

まず、 ..は、「なんでもいい2文字」を表します。
それが( )でひとまとめにされた後に、+(1回以上繰り返される)が続いていますので、「何らかの2文字がある場合」「何らかの4文字がある場合」「何らかの6文字がある場合」...に一致することになります。

(例3)

f:id:four_or_three:20160629102150p:plain:w250

(・|・、) という部分を見てみます

まず、・|・、は、「 or ・、」を意味します。
それが( )でひとまとめになった状態で、さいとうたかをの間に入っています。
つまり、さいとうたかを の間に、・、がある場合に一致することになります。


( )の2つ目の用途は、「後方参照」です。
後方参照とは、後で再利用する、というような意味です。具体例で説明します。

(例4)

f:id:four_or_three:20160628234051p:plain:w250

Find Textには(さいとう)(.)(たかを)と記述しています。

この使用例では、( )の1つ目の役割として説明した「ひとまとめにする機能」が利用されていません。ですので、ひとまず( )を取り除いて考えてみます。

さいとう.たかを


となります。さいとうたかをの間に何らかの1文字がある場合に一致する表現です。
Inputのテキストでは、「2行目の行頭から行末まで」と「3行目の行頭から行末まで」に一致します。

ここで、( )を取り除く前の表現に戻して考えます。

(さいとう)(.)(たかを)


( )に入れると、次のことが起きます。

・1つ目の( )の中の表現によって検出された文字列が$1という変数に入る

・2つ目の( )の中の表現によって検出された文字列が$2という変数に入る

・3つ目の( )の中の表現によって検出された文字列が$3という変数に入る
...

つまり、今回の例では、

$1という変数には、さいとうで検出された文字列が入っています。
$2という変数には、 .で検出された文字列が入っています。
$3という変数には、たかをで検出された文字列が入っています。

変数に入れた文字列は、Replace Withで再利用することができます。
この例では、$3$2$1と、順番をひっくり返すように再利用しています。

以上をまとめますと、

・「2行目の行頭から行末まで」と「3行目の行頭から行末まで」が検出される
・検出された部分の順番を組み替えて、Replaceする

という動作となります。


( )の中には、普通の文字でもメタ文字でもなんでも入れることができます。
とにかく再利用したい部分はなんでも( )でくくってしまえばOKです。

なお、ここではReplace Textを利用した後方参照を紹介しましたが、Get Group from Matched Textアクションを利用して後方参照をすることもできます。
利用方法はそちらを参照してください。

第8回に続きます。

広告を非表示にする