以前仕事で使ったやつ。
だが、前職で作って手元に記録せずに離職してしまったので、今改めて書いてみた。
もっと壮大な表現を半日くらいかけて作った記憶があるが、今作ったら5分ほどでできてしまった。。あれは何だったんだろうか。
私が作った目的は、URLパラメータのKeyに特定の文字列が完全一致、または部分一致で入っていないかチェックするものでした。
URLパラメータとは「http://hogehoge.com?test=true&device=sp
」というURLがあった時の「test=true」の部分になります。クエリストリングとも呼ばれます。
そして、URLパラメータのKeyとは=の前部分、上のURLで言えば「test」と「device」がKeyになります。=の後ろはValueです。
つまり、検知したかったのは「"?または&"と"="の間に特定の文字列が含まれていないか」ということです。
特定の文字列に挟まれる文字列の完全一致
「hogehoge」のKeyが無いかをチェックする正規表現は以下の通り。
(\?|&)hogehoge=
いたってシンプルですね。
「?」はメタ文字なので""でエスケープしています。
特定の文字列に挟まれる文字列の部分一致
(\?|&)(.*?)hogehoge(.*?)=
こちらは完全一致の表現に対して検知したい文字の前後に「(.*?)」を入れています。
複数のパラメータが&で連結されることがあるので、hogehogeの前後は任意の文字が0個以上最短一致で入るようにしています。
これが最短一致ではなく最長一致つまり
(\?|&)(.*)hogehoge(.*)=
となっていると、
「http://hogehoge.com?dummy=hogehoge&device=sp
」も一致対象となってしまい、Valueのデータまでチェック対象となってしまいます。