Twigで正規表現を使った条件分岐を行う場合、mathesを使って以下のようなコードを書く。

{% if String matches '{#ここに正規表現を書く}' %}
  Code...
{% endif %}

単純に見えるが、正規表現を使うにあたってTwig独特の仕様があったのでメモしておく。

メタ文字のエスケープはバックスラッシュ3つ!

例として、郵便番号の正規表現を見てみよう。

普通は以下のような書き方になると思う。

^\d{3}-\d{4}$

これを先程のTwig文にそのまま当てはめてもうまく動かないのだ。

{% if Zip matches '{^\d{3}-\d{4}$}' %}
  Code...
{% endif %}

調べてみると、Twigで正規表現を使う場合、エスケープに使うバックスラッシュは「3つ」必要とのことだ。

コードを書き換え次のようにすると動くようになる。

{% if Zip matches '{^\\\d{3}-\\\d{4}$}' %}
  Code...
{% endif %}