如何编写匹配括号内特定字符的正则表达式?
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 内进行转义=]
所以我有一个像这样的字符串,
(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 内进行转义=]