タグ

後読みに関するdelegateのブックマーク (2)

  • 正規表現の先読み・後読み

    正規表現の「先読み(lookahead)」「後読み(lookbehind)」について紹介します。 正規表現の「位置へのマッチ」 正規表現は、文字列のパターンマッチに使われます。たとえば [0-9]{4} は数字4つが並ぶ文字列にマッチする表現です。 多くの正規表現は「文字列」にマッチしますが、「文字列」ではなく「位置」にマッチする表現があります。これは、アンカーと呼ばれます。また、長さ0の文字列にマッチすると考えて、ゼロ幅アサーションとも呼ばれます。 アンカーの例として、^(先頭)$(末尾)\b(単語の境界)などがあります。 この例では、cat にはマッチします。一方、category や concat は cat を含みますが前後が単語の境界になっていないためマッチしません。 先読み 先読み(lookahead)は、位置にマッチする記法の一種です。位置の指定に正規表現を使います。(?=

    正規表現の先読み・後読み
  • 第58回 正規表現の勘所―わかりづらい記法の覚え方、先読みや後読みの実践(3) | gihyo.jp

    my $intro = "私は牛乳と牛丼が好きです"; $intro =~ s/牛(?=丼)/豚/g; print "$intro\n"; # => 私は牛乳と豚丼が好きです 正規表現牛(?=丼)は、牛の右側に丼がある場合、牛にマッチします。丼は先読み(?=丼)によってマッチに必要な条件ですが、ゼロ幅マッチなのでマッチ文字列には入りません(丼という文字を消費しません⁠)⁠。そのため、マッチ文字列すなわち置換対象文字列は牛となり、結果的に単語牛丼のみ豚丼に置換されます。 この例だとs/牛丼/豚丼/gでも代用できます。しかし、複数の正規表現演算子や文字列関数を駆使しないと実現できなさそうな要望も、先後読みを使うと単一の正規表現で簡潔に書ける場合があります。 先や後はマッチカーソルの動き 初学者が先後読みを学んだ際、「⁠先や後の意味がわからない」と訴える場面をしばしば見かけます。 前項のs/牛(

    第58回 正規表現の勘所―わかりづらい記法の覚え方、先読みや後読みの実践(3) | gihyo.jp
  • 1