「正規表現を使ってループの冗長な表現を簡潔にする」に関しての考えをまとめました。
目次
先日、「入力値をもとに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)
冗長さが減って見やすくなった。今後は正規表現に置き換えられないか考えるとよさそう