所以我有一根这样的绳子,
(name|address)
([name|address])
[name|address]所以,我想检查一下这个字符,忽略它是否在括号中,就像我在这个例子中所显示的那样。
我添加了这个正则表达式,但它并没有捕获我描述的所有场景。
\\|(?![^(]*\\))编辑:
如果我有这样的绳子,
|Hello all, | morning [name|address] |
然后我用|字符来破解字符串。但是,我不想考虑|字符,它在拆分字符串时位于括号内。
发布于 2022-06-03 15:14:04
您可以使用
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()); 
        } 
    }
}详细信息
(?: -非捕获组的开始:\([^()]*\)| - (,除(和)以外的零或多个字符,然后是) char,或\[[^\]\[]*]| - [,除[或]字符以外的零或多个字符,然后是]字符,或[^|] -除管道焦炭以外的任何单个字符)+ -组的末尾,重复一次或多次.注意,在Android、Java、ICU版本中,[和]都必须在字符类中转义。
https://stackoverflow.com/questions/72491116
复制相似问题