请帮忙,我的正则表达能力让我失望.我有以下字符串:
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];