どうも、シノだ。
講座を色々やりすぎて、同時進行がちょっと辛くなってきている…これ以上増やすのはちょっとやめておこう。
今度は正規表現講座だ。今回は、行の先頭、末尾をやっていこうと思う。
これで、ある部分が含まれる…ではなく、その行自体がこういう構造、というパターンを扱うことができる。
前にも書いた通り、正規表現は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アイコンから覗いていってほしい。
それでは。
コメント