java - 正则表达式只匹配逗号而不是括号?

标签 java regex

我有一个类似于以下内容的字符串:

12,44,foo,bar,(23,45,200),6

我想创建一个匹配逗号的正则表达式,但仅匹配不在括号内的逗号(在上面的示例中,除了 23 和 45 之后的两个逗号之外的所有逗号)。我该如何做到这一点(Java 正则表达式,如果这有影响的话)?

最佳答案

假设不能有嵌套括号(否则,您不能使用 Java Regex 来执行此任务,因为不支持递归匹配):

Pattern regex = Pattern.compile(
    ",         # Match a comma\n" +
    "(?!       # only if it's not followed by...\n" +
    " [^(]*    #   any number of characters except opening parens\n" +
    " \\)      #   followed by a closing parens\n" +
    ")         # End of lookahead", 
    Pattern.COMMENTS);

此正则表达式使用 negative lookahead assertion确保接下来的括号(如果有)不是右括号。只有这样逗号才允许匹配。

关于java - 正则表达式只匹配逗号而不是括号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52410707/

相关文章:

java - 如何让 REST 服务为 Java 8 (Local|Offset)DateTime 生成一个简单的字符串(使用 Swagger 时)?

java - 带有@RequestBody的spring mvc异常处理程序

regex - JSF 2.0 validateRegex 带有自己的验证器消息

VSCode 片段中用于删除文件扩展名的正则表达式语句

python - 字符串与 python 中的正则表达式匹配模式

c++ - 从文件中获取行并用作正则表达式(正则表达式)

java - codechef farmer feb.Code :POTATOES 的角落案例

java - hibernate 搜索 : Searching by multiple equal words

正则表达式使用grep从html文件中查找外部链接

java - 在 Java 中通过 HTTP 列出 apache 服务器上的文件/子文件夹