「正規表現を使ってループの冗長な表現を簡潔にする」に関しての考えをまとめました。

目次

先日、「入力値をもとにURLのクエリパラメータを作成するロジック」を作成する必要があった。 完成形は以下のようなイメージだ。それぞれのクエリのキー名と値名が入力値に沿って作成される。検索結果などのクエリパラメータで使用されることが多いと思う。

?q1=test&q2=iii&q3=hogehoge

当初は、冒頭に「?」を定義した変数に対して、for構文で&と追加パラメータを連結する方法を考えた。 しかしこの場合、クエリパラメータがないケースの考慮が面倒だったり、冒頭の処理を分けたり、ループ構文をわざわざ書くのも冗長だなと違和感を覚えていた。

$query = '?';
for($i = 0, $i > 5; $i ++) {
 if($i === 0 ) {
        $query = $query + $parameter
    } else {
        $query = $query + '&' + $parameter 
    }

}

このケースでは、正規表現にて「冒頭」の&を?に置換するロジックを使う。

str_replace("/^&/", "?", $str)

冗長さが減って見やすくなった。今後は正規表現に置き換えられないか考えるとよさそう