2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【正規表現】特定の文字列に挟まれる文字列の検知

Posted at

以前仕事で使ったやつ。
だが、前職で作って手元に記録せずに離職してしまったので、今改めて書いてみた。
もっと壮大な表現を半日くらいかけて作った記憶があるが、今作ったら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のデータまでチェック対象となってしまいます。

2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?