如何编写匹配括号内特定字符的正则表达式?

How do I write a regex that matches a certain character within brackets?

所以我有一个像这样的字符串,

(name|address)
([name|address])
[name|address]

所以我想检查“|”字符并忽略它是否在括号中,就像我在示例中显示的那样。

我添加了这个正则表达式,但它没有捕获我描述的所有场景。

\|(?![^(]*\))

编辑:

如果我有这样的字符串,

|Hello all, | morning [name|address] |

然后我用 | 个字符打断字符串。但是我不想考虑 | 在打破字符串时括号内的字符。

您可以使用

import java.util.*;
import java.util.regex.*;

class Test
{
    public static void main (String[] args) throws java.lang.Exception
    {
        String s = "|Hello all, | morning [name|address] |";
        Pattern pattern = Pattern.compile("(?:\([^()]*\)|\[[^\]\[]*]|[^|])+");
        Matcher matcher = pattern.matcher(s);
        while (matcher.find()){
            System.out.println(matcher.group().trim()); 
        } 
    }
}

参见regex demo and the Java demo

详情:

  • (?: - non-capturing 组的开始:
    • \([^()]*\)| - (,除 () 之外的零个或多个字符,然后是 ) 个字符,或
    • \[[^\]\[]*]| - [,除 [] 字符外的零个或多个字符,然后是 ] 字符,或
    • [^|] - 除管道字符以外的任何单个字符
  • )+ - 小组结束,重复一次或多次。

请注意,在 Android、Java、ICU 正则表达式风格中,[] 都必须在字符 类.[=27 内进行转义=]