如何在括号正则表达式中获取括号外的字符串
how to get string outside brackets within brackets regex
我需要帮助来尝试让正则表达式与双括号一起工作
目前我有正则表达式
(\[.*?\])
这让我可以将所有内容放在括号内,
但是我的字符串有双括号
[DATA1[OTHERDATA]RUBBISH]
我得到的输出是
[DATA1[OTHERDATA]
有没有办法得到完整的括号,包括里面的括号?
您可以使用像
这样的递归正则表达式
\[(?:[^][]++|(?R))*]
详情:
\[
- 文字开头 [
(?:[^][]++|(?R))*
- 一个或多个序列:
[^][]++
- [
和 ]
以外的 1 个或多个字符(所有格匹配)
|
- 或
(?R)
- 递归整个模式
]
- 文字右括号。
在 PCRE 中,您可以使用这个递归正则表达式:
$re = '/(
\[
(
(?:[^][]+|(?1))*
)
\]
)/x';
是的:
(\[([^\[\]]|(?R))*\])
这使用递归正则表达式,请参阅 a demo on regex101.com。
让事情变得美好而简单。贪心匹配应该可以解决问题:
/\[(.+)\]/
.+
将匹配任何字符,但它会在最后一个 ]
处停止,因此匹配将是 "DATA1[OTHERDATA]RUBBISH"
Demo
分解真的很简单:
\[
:匹配文字 [
(.+)
:匹配(并捕获)所有字符 - 包括左括号和右括号
\]
:匹配文字]
无论你有多少嵌套括号,结果都是一样的:
[data[foo][bar][eve[n]]more]
//match:
data[foo][bar][eve[n]]more
试试这个,它匹配括号(递归)
preg_match('/\[(?:[^\[\]]*+|(?0))*\]/', $string, $match );
此处显示
https://regex101.com/r/oL4kH5/2
例如给出这个
[DATA1[OTHERDATA]RUBBISH] hello [something]
您将获得这 2 场比赛
[DATA1[OTHERDATA]RUBBISH]
[something]
它还会区分匹配的括号,例如:
[DATA1[OTHERDATA]RUBBISH[hello] hello [something]
将 return 3 场比赛
[OTHERDATA]
[hello]
[something]
这是因为第一个括号不匹配。
我需要帮助来尝试让正则表达式与双括号一起工作
目前我有正则表达式
(\[.*?\])
这让我可以将所有内容放在括号内,
但是我的字符串有双括号
[DATA1[OTHERDATA]RUBBISH]
我得到的输出是
[DATA1[OTHERDATA]
有没有办法得到完整的括号,包括里面的括号?
您可以使用像
这样的递归正则表达式\[(?:[^][]++|(?R))*]
详情:
\[
- 文字开头[
(?:[^][]++|(?R))*
- 一个或多个序列:[^][]++
-[
和]
以外的 1 个或多个字符(所有格匹配)|
- 或(?R)
- 递归整个模式
]
- 文字右括号。
在 PCRE 中,您可以使用这个递归正则表达式:
$re = '/(
\[
(
(?:[^][]+|(?1))*
)
\]
)/x';
是的:
(\[([^\[\]]|(?R))*\])
这使用递归正则表达式,请参阅 a demo on regex101.com。
让事情变得美好而简单。贪心匹配应该可以解决问题:
/\[(.+)\]/
.+
将匹配任何字符,但它会在最后一个 ]
处停止,因此匹配将是 "DATA1[OTHERDATA]RUBBISH"
Demo
分解真的很简单:
\[
:匹配文字[
(.+)
:匹配(并捕获)所有字符 - 包括左括号和右括号\]
:匹配文字]
无论你有多少嵌套括号,结果都是一样的:
[data[foo][bar][eve[n]]more]
//match:
data[foo][bar][eve[n]]more
试试这个,它匹配括号(递归)
preg_match('/\[(?:[^\[\]]*+|(?0))*\]/', $string, $match );
此处显示
https://regex101.com/r/oL4kH5/2
例如给出这个
[DATA1[OTHERDATA]RUBBISH] hello [something]
您将获得这 2 场比赛
[DATA1[OTHERDATA]RUBBISH]
[something]
它还会区分匹配的括号,例如:
[DATA1[OTHERDATA]RUBBISH[hello] hello [something]
将 return 3 场比赛
[OTHERDATA]
[hello]
[something]
这是因为第一个括号不匹配。