我如何写一个正则表达式匹配括号内的某个字符?



我有一个像这样的字符串

(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()); 
} 
}
}

参见正则表达式演示和Java演示。

细节:

  • (?:-非捕获组启动:
    • ([^()]*)|-(,除()以外的0个或多个字符,然后是)字符,或
    • [[^][]*]|-[, 0个或多个[]以外的字符,然后是]字符,或
    • [^|]-除管道字符以外的任何单个字符
  • )+-组结束,重复一次或多次。

注意,在Android, Java, ICU regex中,[]必须在字符类中转义。

最新更新