0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

正規表現の先読み、後読み

Posted at

調べても「先読み、後読みは位置へのマッチング」......となっていて、理解には程遠かった。
そもそも先読み、後読み、の主語も述語もないのが理解し辛さへの拍車をかけていると思う。

「本当にマッチしたいパターン」が「アンカー(位置)としてマッチしたいパターン」より先(前)にあるから先読み、後にあるから後読み。

肯定先読み

マッチした位置の先頭を基準にする。
以下の例だとFantasyの先頭のFが位置としてマーク(アンカーというらしい)される。

// 特になんでもない
'FinalFantasy'.match(/Final(Fantasy)/)[0]
// -> FinalFantasy

// 肯定先読み Fantasyが続くFinal
'FinalFantasy'.match(/Final(?=Fantasy)/)[0]
// -> Final

// ありえないが 位置にマッチしているという話
'FinalFantasy'.match(/Final(?=Fantasy)Fantasy/)[0]
// -> FinalFantasy
// Fantasyが続くFinalの後にFantasyが存在する ということ

否定先読み

肯定先読みの逆。


// Fight が続かないFinal
'FinalFantasy'.match(/Final(?!Fight)/)[0]
// -> Final

// Fantasy が続くとアンマッチ
'FinalFantasy'.match(/Final(?!Fantasy)/)
// -> null

肯定後読み

肯定先読みの。。。なんだ、逆か?


'FinalFantasy'.match(/(?<=Final)Fantasy/)[0]
// -> Fantasy

'FinalFantasy'.match(/Final(?<=Final)Fantasy/)[0]
// -> FinalFantasy

否定後読み


'FinalFantasy'.match(/(?<!Granblue)Fantasy/)[0]
// -> Fantasy

'FinalFantasy'.match(/(?<!Granblue)Fantasy/)[0]
// -> Fantasy

余談だが、中学生くらいのときに「正規表現」という言葉を聞いて「(厨二病的に)めっちゃかっこいいけどなんのためにあるのかよくわからない」と感じていた。こんな便利なものは他にないというのに。
「パターンとして扱う」と紹介された時に一番しっくりきたけれど、DBの正規化を学んだ後の方が「正規」に違和感がないかもしれない。「抽象」に近いのかな、と思う。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?