我想抓住一行中的括号内容。括号可以是()或[]。
我写了这个[\[\(].*[\)\]]
,但它也匹配(something]
。
我想匹配(some)
或[this]
而不是[this)
你能指导我吗?
答案 0 :(得分:1)
可能的解决方案是[(\(.*\))(\[.*\])]
。在这种情况下,正则表达式匹配序列(+任何+)或序列[+任何+]。
答案 1 :(得分:1)
您可以使用替代方法,而不是使用单个复杂的正则表达式,例如:
\[.+?\]|\(.+?\)
说明强>
\[
字面匹配字符[
。.+?
匹配除行终止符之外的任何字符。+?
量词在一次和无限次之间匹配,只需要几次。\]
字面匹配字符]
。|
允许替代方案,例如布尔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
我在上面说过。