FrontPage

概要

  • いろいろ非直感的なのでテスト駆動的に確認すること
  • 日本語に直すとよい

参考

文法

記述意味
.任意の1文字
?直前の文字があるかないかどちらか
^文頭
$文末
*貪欲な1個以上マッチ
+貪欲な1個以上マッチ
*?控えめな0個以上マッチ
+?控えめな1個以上マッチ
{n,m}n個以上m個以下。{n,}でn個以上、{,m}でm個以下を表す
()ひとまとまりとみなしてキャプチャ
(?:)ひとまとまりとみなさずキャプチャ
[a-zA-Z0-9]a-z, A-Z, 0-9の1文字
[ABC]AもしくはBもしくはCの1文字
[^ABC]A、B、Cのいずれでもない1文字
パイプパイプの前、もしくは後ABCパイプDEFで、ABCとDEFにマッチする
(?<=abc)肯定の後読み。abcの後にマッチする
(?=abc)肯定の先読み。abcの前にマッチする
(?<!abc)否定の後読み。abcという文字列以外の直前の位置にマッチする
(?!abc)否定の先読み。abcという文字列以外の直後の位置にマッチする
\b単語の区切り目ちなみに、\<と\>が「単語の先頭、末尾」にマッチ
\w英単語の構成文字
\s空白文字環境依存
\d数字
\B、\W, \S, \D小文字の逆の意味
\1, \2, ...キャプチャされた順にその文字列がそのまま入る

イディオム

最短マッチ

  • 正規表現の*?は最短のマッチという意味になる
  • 基本的に*ではなく*?のほうが最短マッチで探索打ち切りなので早くなる傾向
  • 正規表現の王道は、ちゃんとストラクチャっぽく書いてやること、そうじゃないと字面に騙されるので注意(だがめんどい)
  • キャプチャしない(:?)の中にキャプチャ()が入っている場合、キャプチャが優先される。要するに、グルーピングしたいけどキャプチャしたくはないよ、というときに使う (\s*\w)+とかのようにグルーピング必須のことはあるからね
  • 正規表現には??みたいなやつがあって、これも最短一致。
  • 先読みとか後読みとかは、ただ「そこにあればよい」「そこになければよい」というマッチングなので注意
  • JavaScriptでは正規表現を動的に作ることが出来る(当然)

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS