正则表达式用于匹配Twig中的数字

时间:2019-05-05 07:25:51

标签: php regex twig

我有一条这样的路线

  

admin /申请人/ 1111 /视图

我试图像这样在树枝上捉住那条路线:

{% if route  matches '#admin\/applicants\/\d+\/view#' %}
      route matched
{% else %}
      not matched 
{% endif %}

它应该匹配,经过测试并且可以完美运行。

如何解决此问题?

2 个答案:

答案 0 :(得分:2)

您可能只想使用[0-9]而不是\d,这可能会解决您的问题:

代码:

{% set route = 'admin/applicants/1111/view' %}
{% if route  matches '#admin\/applicants\/[0-9]+\/view#' %}
    route matched
{% else %}
    not matched 
{% endif %}

输出

route matched

答案 1 :(得分:2)

虽然Emma's answer是正确的,但请记住,您需要在\d前面“转义”反斜杠,否则twig会转换为\d的原义源代码中的d

{% if route  matches '#admin\/applicants\/\\d+\/view#' %}
      route matched
{% else %}
      not matched 
{% endif %}

{% if route  matches '#admin\/applicants\/\d+\/view#' %}

编译的PHP源代码

if (preg_match("#admin/applicants/d+/view#", (isset($context["route"])

如您所见,已编译的php源仅翻译为d+。添加一个额外的反斜杠可“解决”此问题(请参见行上方的代码)