CODEPREP で正規表現を学びつつ、練習問題の3パターンをメモる。
電話番号にマッチさせる
- 電話番号は3ブロックの数字の並びで構成される
- 各ブロックの桁数は 3桁、3桁 or 4桁、4桁
- 各ブロックは
-
または(
or)
で区切られる - 先頭のブロックの数字は0で始まる
- 先頭または末尾に空白や数字以外があることは許容しない
/^0\d{2}[-(]\d{3,4}[-)]\d{4}$/
URLからホスト名を抽出する
- URLは
http://
またはhttps://
で始まる - ホスト名の後ろに
/
がない場合もある
/https?.{3}([^/]*)/
http://
または https://
で始まるということは、http
の後ろに s
があってもなくてもよいということと同義である。正規表現では https?
で表す。
ホスト名は、http(s)://
以降で最初に現れる /
より前の部分を抽出する。つまり、http(s)://
以降で /
以外の文字が続く限りキャプチャする。正規表現では ([^/]*)
で表す。
HTML要素の属性値を抽出する
a
要素からhref
属性の値をキャプチャする=
の前後には空白が入ることがある- 属性値は
"
または'
で括られる href
以外の属性が定義されることがあり、順序は不定である
/<a\s*.*href\s*=\s*(["'])(.*?)\1.*/
空白があるかないかは、正規表現では \s*
で表す。
シングルクォートとダブルクォートの両方に対応する場合は ["']
で表す。また、後ろのクォートは前のクォートと同一である必要があるため、前のクォートをキャプチャして \1
で後方参照する。キャプチャを複数定義するため、抽出結果は配列の2番目(\2
)を取る。
href
以外の属性が存在し得るため、同じクォートが複数回現れることがある。キャプチャは (.*?)
で最短マッチにする。