【问题标题】:Regex to return text between consecutive opening closing brackets正则表达式在连续的左括号之间返回文本
【发布时间】:2014-01-30 10:22:03
【问题描述】:

我正在寻找一个匹配连续[] 括号之间的字符串的正则表达式。我有一个看起来像 \[(.*?)\] 的正则表达式,它匹配 [ ] 之间的内容,其中可能有一个 ]

示例: String: [ text [text1] ]

应该返回[text1], [ text [text1] ]
目前我的正则表达式将返回[ text [text1]

我相信这一定与前瞻断言有关,但不确定如何前瞻多个字符。

【问题讨论】:

  • 您使用的是什么正则表达式引擎?大多数引擎不能做你想做的事:) 在 PCRE 中向 this recursive pattern 打个招呼

标签: regex regex-lookarounds


【解决方案1】:

以下方法返回您想要的结果:

> echo "[ text [text1] ]" | egrep -o '\[([[:alnum:]]+)\]'
> [text1]

解释: 它仅适用于扩展的正则表达式 - 因此使用 egrep。参数 -o 只返回匹配的模式。最后,寻找在括号内出现一次或多次的字符类 [:alnum:] 包含 a-z、A-Z、0-9 和下划线。因此它不会接受 ] 或 [。

如果您需要匹配更多字符(例如:空格),则需要在括号内的匹配模式中添加更多字符 - 如下所示:

> echo "[ text [text1 text2] ]" | egrep -o '\[([[:alnum:] ]+)\]'
> [text1 text2]

【讨论】:

  • [ text [text1 text2] ] 的期望结果是[ text [text1 text2] ][text1 text2]
  • 啊,是的 - 你是对的。我错过了(以及你对这个问题的评论)。您为什么不提出您的工作解决方案作为答案,而不是将其作为评论发布?特别是因为 - 正如您正确指出的那样 - 在“正常”正则表达式中可能不会有解决方案。
  • 因为我喜欢给definitvedetailed答案。如果提问者确实提供了他正在使用的引擎,我本可以基于此发布一个合适的答案。否则,比如说我提供了一个 PCRE 解决方案,然后他提到他正在使用 .NET,那么我将不得不编辑并重新编写我的整个答案,说实话这很痛苦。
  • 好的,感谢您澄清这一点。我只是想知道是否有一些我不知道的不成文或书面规则(例如“不要在您以评论的形式提出答案之前发布答案”或类似的)。
  • 我正在使用java。我从这个链接 (en.wikipedia.org/wiki/Comparison_of_regular_expression_engines) 看到不支持递归。所以我想这至少在java中不起作用。无论如何感谢您的回答。
猜你喜欢
  • 2011-06-21
  • 1970-01-01
  • 2012-09-14
  • 2015-12-30
  • 1970-01-01
  • 2019-05-17
  • 2016-07-21
相关资源
最近更新 更多