dongsuoying9059 2016-11-12 16:04
浏览 38
已采纳

PHP:如何在匹配和不匹配正则表达式模式的子字符串中拆分字符串?

I'm new here and need your help. I want to match an string that is an URI - and get an array of substrings.

This is my input string:

/part-of-{INTERESETINGSTUFF}/an-url/{MORESTUFF}

I want this output array:

array(4) {
     [0]=>
     string(9) "/part-of-"
     [1]=>
     string(19) "{INTERESETINGSTUFF}"
     [2]=>
     string(8) "/an-url/"
     [3]=>
     string(11) "{MORESTUFF}"
}

I'm already able to preg_match everything with curly brackets by the pattern \{[^}]+\}. But how can I achieve my desired result?

Best regards!

  • 写回答

2条回答 默认 最新

  • duanfen7676 2016-11-12 16:55
    关注

    You can use a very simple ({[^{}]*}) regex matching {, zero or more symbols other than { and } with preg_split and PREG_SPLIT_DELIM_CAPTURE option (that will put all the captured subvalues into the resulting array):

    $str = '/part-of-{INTERESETINGSTUFF}/an-url/{MORESTUFF}';
    $res = array_filter(preg_split('/({[^{}]*})/', $str, -1, PREG_SPLIT_DELIM_CAPTURE));
    print_r($res);
    // => Array( [0] => /part-of-  [1] => {INTERESETINGSTUFF}  [2] => /an-url/ [3] => {MORESTUFF} )
    

    See PHP demo

    The array_filter is used to remove all empty elements from the resulting array.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥15 键盘指令混乱情况下的启动盘系统重装