正则表达式匹配括号内容

时间:2018-02-19 17:17:11

标签: java regex

我想抓住一行中的括号内容。括号可以是()或[]。

我写了这个[\[\(].*[\)\]],但它也匹配(something]。 我想匹配(some)[this]而不是[this) 你能指导我吗?

4 个答案:

答案 0 :(得分:1)

可能的解决方案是[(\(.*\))(\[.*\])]。在这种情况下,正则表达式匹配序列(+任何+)或序列[+任何+]。

答案 1 :(得分:1)

您可以使用替代方法,而不是使用单个复杂的正则表达式,例如:

\[.+?\]|\(.+?\)

Regex101 Example

说明

  • \[字面匹配字符[
  • .+?匹配除行终止符之外的任何字符。
  • +?量词在一次和无限次之间匹配,只需要几次。
  • \]字面匹配字符]
  • |允许替代方案,例如布尔OR。
  • |右侧的正则表达式与上述类似。

答案 2 :(得分:1)

我假设,方括号或圆括号之间的内容 既不包括"拥有"括号和"其他"括号, 所以内容如:[]()在内容中被禁止 匹配。

为了使正则表达式更有用,我放了两个捕获组,#1之间 在[]之间()以及#2,以帮助确定 哪些括号围绕着被捕获的内容。

要匹配方括号(带有捕获组)之间的内容,您需要:

\[([^\[\]()]+)\]

并匹配圆括号之间的内容(括号,也包括 你需要的一个捕获组:

\(([^\[\]()]+)\)

以上都是"部分"正则表达式(对于每个变体)都是替代品 最终的正则表达式,因此它们与|分开。

所以,完整的正则表达式是:

\[([^\[\]()]+)\]|\(([^\[\]()]+)\)

如果是[xxxx]之类的源文字,xxxx将被捕获为第1组, 而在(yyyy)的情况下,yyyy将被捕获为第2组。

答案 3 :(得分:0)

[?(\[)[\]]|[\)]]+

如果您确定要将字符串包含在(...)[...]中,

可能对您有所帮助。 ] 您之前的表达式无效,因为您尝试匹配此条件:either [ or ( in beginning and either ] or ) in the end。你需要的是一个条件:if [ in beginning then ] in end or if ( in beginning then ) in the end我在上面说过。