我需要帮助才能让正则表达式使用双括号
目前我有这个用于正则表达式
(\\[.*?\\])
允许我将所有内容都放在括号内,
但我的字符串有双括号
[DATA1[OTHERDATA]RUBBISH]
我得到的输出是
[DATA1[OTHERDATA]
是一种获得包括支架内部在内的完整支架的方法吗?
答案 0 :(得分:3)
保持美好而简单。一场贪婪的比赛应该可以解决这个问题:
/\[(.+)\]/
.+
将匹配任何字符,但它会在最后]
停止,因此匹配将是“DATA1 [OTHERDATA] RUBBISH”
细分非常简单:
\[
:匹配文字[
(.+)
:匹配(并捕获)所有字符 - 包括左右括号\]
:匹配文字]
无论您拥有多少嵌套括号,结果都是相同的:
[data[foo][bar][eve[n]]more]
//match:
data[foo][bar][eve[n]]more
答案 1 :(得分:1)
您可以使用像
这样的递归正则表达式\[(?:[^][]++|(?R))*]
请参阅regex demo
<强>详情:
\[
- 文字开头[
(?:[^][]++|(?R))*
- 一个或多个序列:
[^][]++
- 除[
和]
以外的1个或多个字符(占有率)|
- 或(?R)
- 递归整个模式]
- 一个字面的结束括号。答案 2 :(得分:0)
答案 3 :(得分:0)
答案 4 :(得分:0)
尝试这个,它匹配括号(递归)
preg_match('/\[(?:[^\[\]]*+|(?0))*\]/', $string, $match );
这里显示
https://regex101.com/r/oL4kH5/2
例如给出这个
[DATA1[OTHERDATA]RUBBISH] hello [something]
您将获得这两场比赛
[DATA1[OTHERDATA]RUBBISH]
[something]
它还可以区分匹配的括号,例如:
[DATA1[OTHERDATA]RUBBISH[hello] hello [something]
将返回3场比赛
[OTHERDATA]
[hello]
[something]
这是因为第一个括号无法匹配。