我的程序将 SQL VALUES 多行字符串解析为单行字符串数组。
典型的输入字符串如下所示:
(11,'-1','Service A (nested parentheses)','en') (22,'-2','Service B (nested parentheses)','en')
期望的输出:
- 第 1 组:
11,'-1','Service A (nested parentheses)','en'
- 第 2 组:
22,'-2','Service B (nested parentheses)','en'
我尝试过以下正则表达式,但只有部分运气:
\(('.*?'|.*?)\)
在正则表达式中处理这个问题的正确方法是什么?
EDIT:
- 目标平台是Java 6/7
- 无需用新行替换括号 - 只需捕获组
EDIT:在您对表情符号发表评论后,我会建议另一种方法:
(?<=\()(?:'[^']*'|[,\s]+|\d+)+(?=\))
See demo http://regex101.com/r/iR9qS9。这假设您的标记是由单引号分隔的字符串或数字。那是对的吗?
原答案
通过一个潜在的嵌套级别,这将适用于大多数正则表达式风格,包括 Java:
(?<=\()(?:[^()]+|\([^)]+\))+
See demo http://regex101.com/r/cU8rC7
它是如何工作的?
- 后行断言前一个字符是左括号
(
- 非捕获组
+
量词匹配以下一个或多个:(i) 任意数量的非左括号或右括号的字符,或者|
(二) 全面(parenthesized expressions)
如果要确保容器平衡,请在末尾添加前瞻:
(?<=\()(?:[^()]+|\([^)]+\))+(?=\))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)