php – 来自字符串的正则表达式顶级内容

请帮忙,我的正则表达能力让我失望.我有以下字符串:

username|email_address|phone_numbers[number]profile[title|addresses[id]]

我希望能够在方括号之间提取任何数据,但不能提取该数据是已提取集的子集的位置.因此,任何嵌套都应保留为父提取字符串的一部分.

在上面的例子中,我提取了两个部分:

"number"
"title|addresses[id]"

请注意如何不提取[id],因为它是较低级别数据集的一部分.

我一直试图用preg_match来做这件事,但我想我可能不得不求助于迭代字符串中的每个字符.

解决方法:

这是一个正则表达式解决方案:

preg_match_all(
    '/(?<=\[)     # Assert that the prevIoUs characters is a [
      (?:         # Match either...
       [^[\]]*    # any number of characters except brackets
      |           # or
       \[         # an opening bracket
       (?R)       # containing a match of this very regex
       \]         # followed by a closing bracket
      )*          # Repeat as needed
      (?=\])      # Assert the next character is a ]/x', 
    $subject, $result, PREG_PATTERN_ORDER);
$result = $result[0];

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...