dqve65954 2018-10-08 16:08
浏览 31
已采纳

PHP preg_replace重用编辑匹配

I am trying to create an URL matching pattern where the route parameters can be read.

This is what I have:

$routePattern = '/test/{id}/edit';
// Can I strip the opening and closing bracket from `$0` here?
$regexPattern = '#^' . preg_replace('#{[\w]+}#', '(?P<$0>[\w]+)', $routePattern) . '$#';
// Matching done here...

The problem is that this will result in: #^test/(?P<{id}>[\w]+)/edit$#. But I would like that the brackets get stripped from id. So I would like the following result: #^test/(?P<id>[\w]+)/edit$#.

How is this possible in a clean way? This is the non clean way I found:

$routePattern = '/test/{id}/edit';
$regexPattern = '#^' . preg_replace('#{[\w]+}#', '(?P<$0>[\w]+)', $routePattern) . '$#';
$regexPattern = str_replace(['{', '}'], '', $regexPattern);
// Matching done here...
  • 写回答

2条回答 默认 最新

  • douyi8732 2018-10-08 16:17
    关注

    Use a capturing subpattern by surrounding the \w+ in parenthesis:

    preg_replace('#{([\w]+)}#', '(?P<$1>[\w]+)', $routePattern)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 设计一个温度闭环控制系统
  • ¥100 关于加载卡的问题有能知道这个要怎么处理吗?
  • ¥100 rtmpose姿态评估
  • ¥15 java 通过反射找路径下的类,打包后就找不到
  • ¥15 通联支付网上收银统一下单接口
  • ¥15 angular有偿编写,
  • ¥15 centos7系统下abinit安装时make出错
  • ¥15 hbuildex运行微信小程序报错
  • ¥15 关于#python#的问题:我知道这个问题对你们来说肯定so easy
  • ¥15 wpf datagrid如何实现多层表头