fv17の日記 - Coding Every Day

Webエンジニアの備忘用ブログです。主にWeb界隈の技術に関して書いています。

正規表現 - 肯定の先読み・後読みなどの復習

下記の復習用

qiita.com

投稿してから気づいたが、上記の記事の「まとめ」読めばいいじゃん...
まぁ写経がてら学べたからよしとしよう。

\b 単語の境界

「単語の境界」を意味する。下記から英単語「ear」を抽出したい時に、「\bear\b」とすることで「hearing」にマッチせず「ear」のみ抽出できる。

ear is the organ of the sense of hearing.

肯定の後読み・先読み

肯定の後読み (?<=abc) abcの「直後の位置」から
肯定の先読み (?=abc) abcの「直前の位置」において
否定の後読み (?< !abc) abc以外の「直後の位置」から
否定の先読み (?!abc) abc以外の「直前の位置」において

< !の間のスペースは不要。はてな記法に対応するため空けているだけ。

後方参照

キャプチャした文字列を、正規表現内部で参照する技のこと。

<a href="http://google.com">http://google.com</a>

下記の正規表現のように、\1や\2などと参照できる。

<a href="(.+?)">\1<\/a>

| または

/','|':'/

Railsのバリデーションにおける^ &は\A \zを使うこと

validates :phone_number, format: { with: /\A\d+-\d+-\d+\z/ }

^ &はあくまで「行の」先頭と末尾。そのため、複数行入力に対応できずセキュリティ的に危険。
上記の理由で、「文字列の」先頭と末尾を意味する\A \zを使うべし。
なお、\Zは文字列の末尾の改行文字を許可してしまうので\zとする。

\ でエスケープ

[abc] という文字列にマッチさせたい場合、\[abc\] とすれば良い
同じように、test.rbという文字列にマッチさせたい場合、test\.rb と\.にしないと任意の1文字と判断されるので注意。