楽しい正規表現講座第2回「行の開始・終了」

どうも、シノだ。

講座を色々やりすぎて、同時進行がちょっと辛くなってきている…これ以上増やすのはちょっとやめておこう。

今度は正規表現講座だ。今回は、行の先頭、末尾をやっていこうと思う。

これで、ある部分が含まれる…ではなく、その行自体がこういう構造、というパターンを扱うことができる。

前にも書いた通り、正規表現は1行ずつ処理していくことが多い。これも必須の表現の一つだろう。

スポンサーリンク

前回の復習

だいぶ間が空いてしまったが、前回任意の文字列と、繰り返しを見てきた。

特に、任意の文字「.」と任意の文字列「.*」は非常によく使うので、使いこなせるようにしておこう。

行の先頭

さて、早速本題だ。まずは行の先頭を表していく。

これは、ある行がどんなものから始まっているかを表すことができる。具体例から見ていこう。

例えば、行の先頭が半角スペース0個以上で、次に<が来るようなものを探したいとする。

入力するファイルは、前回の例からちょっと変えよう。

<html>
    <head>
        <title>
            てすと
        </title>
    </head>
    <body>
        <h1>
            たいとる
        </h1>
        <p>
            だんらく<>
        </p>
    </body>
</html>

前回の例に、半角スペースでインデントをつけたものだ。

これについて、上で書いたパターンを探していく。パターンは以下の通り。

^ *<

先頭に「^」がついている。これが、行の先頭を表すものだ。

この表現は、まず^がついているので先頭から見る。次に、「 *」…半角スペースが0回以上繰り返し続く。そして、その直後に「<」がある、というものを探す。

では、これを実際に動かしてみよう。前回と同じように、Sample.txtに保存して、PowerShellでコマンドを実行する。

Select-String -Pattern '^ *<' Sample.txt

実行結果
Sample.txt:1:<html>
Sample.txt:2:    <head>
Sample.txt:3:        <title>
Sample.txt:5:        </title>
Sample.txt:6:    </head>
Sample.txt:7:    <body>
Sample.txt:8:        <h1>
Sample.txt:10:        </h1>
Sample.txt:11:        <p>
Sample.txt:13:        </p>
Sample.txt:14:    </body>
Sample.txt:15:</html>

こんな感じで抜き出せたと思う。「だんらく<>」も、綺麗に排除されている

まず、これで先頭を表せた。

行の末尾

今度は、さっきと逆に、行の末尾を表していこう。

これで、こんなパターンで終わる行、といった書き方ができる。

で、上のサンプルからまた探してきたいのだが、今度は終了タグ…スラッシュがあってタグが閉じる、かつそこで行が終わるものを探してこよう。

先に表現だけ書いてしまう。以下のような感じだ。

/.+>$

順番に見ていこう。

まず、先頭にスラッシュがある。これが入ったものが対象になる。

で、次に.+だ。前回やったように、1文字以上の任意の文字列が来る。

そして、>閉じ括弧を見ている。

最後に、$が入っている。これが、行の終了を表す。

つまり、このパターンでは、スラッシュがあり、文字が1個以上入ってからカッコで閉じられ、そこで行が終了するものを探してきている。まあ、上で書いたままだ。

結果は以下の通り。

Select-String -Pattern '/.+>$' Sample.txt

実行結果
Sample.txt:5:        </title>
Sample.txt:6:    </head>
Sample.txt:10:        </h1>
Sample.txt:13:        </p>
Sample.txt:14:    </body>
Sample.txt:15:</html>

綺麗に、終了タグだけ抜き出せていると思う。よかったら、ファイルをちょっと書き換えて実行して見て欲しい。

例えば、「だんらく<>」を「だんらく</>」にしても、そこは含まれない。また、各終了タグの後ろに半角スペース等入れたら、そこが結果に出なくなるだろう。

おわりに

ちょっと短くなってしまったが、区切りなのでここまでにしておこう。

今回は、行の先頭末尾を表すパターンを扱った。これがあると、その行自体がどんなパターンか、という指定もできる。

次回だが、前回迷っていたもう一つの大括弧をやろうと思う。これが使えると、一気に幅が広がる

更新情報はTwitterでも垂れ流している。よかったら、ページ下部のTwitterアイコンから覗いていってほしい。

それでは。

コメント

タイトルとURLをコピーしました