RegEx基于运算符拆分字符串并保留运算符

时间:2013-06-14 09:27:19

标签: java regex string split pattern-matching

我想根据几个操作数拆分字符串。

例如 字符串: a&&(b || c)

ANS:String [] {a,&&,(,||,c,)}

是否可以使用Java RegEx?如果是,那么如何?

我尝试使用 [&& ||()] regEx,但它没有提供所需的输出。甚至我不确定如何保留运营商。

修改 如果我们有&和|而不是&&和|| ?

2 个答案:

答案 0 :(得分:4)

你可以分开:

(?<![&|])(?=[&|])|(?<=[&|])(?![&|])
  • (?<![&|])(?=[&|])表示“任何 inter-char 前面有&| 后跟&|“;
  • 在对立面上,(?<=[&|])(?![&|])表示“ <的任何 inter-char &|之后 strong>不后跟&|“。

例如:

String pattern = "(?<![&|])(?=[&|])|(?<=[&|])(?![&|])";
String input = "a&&(b||c)";
String[] array = input.split(pattern);
System.out.println(Arrays.asList(array));

打印:

[a, &&, (b, ||, c)]

答案 1 :(得分:0)

您需要提供“操作数”列表,例如:

[0-9]|[a-z]|[A-Z]|\|\||&&|\(|\)

每个非转义的|都定义了新的操作数。您需要通过添加\来转义一些作为关键字的操作数。

然后您需要使用find的{​​{1}}。得到每个操作数。

相关问题