正则表达式 - 在`:`上拆分字符串但不在if语句中

时间:2016-12-04 16:47:45

标签: java regex

我无法在这个问题上找到解决方案。在正则表达式中它甚至可能吗?

我有这个样本:

...:...:If...Then...:...:Else...:...:...:IfEnd:...

我想将我的字符串拆分为冒号,而不是我的if语句中的冒号。

类似的东西:

  1. ...
  2. ...
  3. If...Then...:...:Else...:...:...:IfEnd
  4. ...
  5. 我搜索了其他问题,但所有问题都有1个字符的分隔符,您可以使用[^set]来解决问题。 这种情况可以使用正则表达式吗?

    我甚至没有半工作的正则表达式解决方案,因为我尝试过的都没有。哈哈。

    如果你想知道我在做什么。我正在尝试创建一个解析一些脚本的应用程序。系统将分隔语句并分别解析每一行。但是由于显而易见的原因,将if语句/ while循环/ for循环分开是行不通的。 我认为解决方案不是传统的,或者是不正确的吗?

1 个答案:

答案 0 :(得分:3)

假设您的输入没有换行符,您可以使用:

String str = "...:...:If...Then...:...:Else...:...:...:IfEnd:...";
String[] toks = str.replaceAll("(\\bIf\\b.*?\\bIfEnd\\b):?|:", "$1\n").split("\\n+");

for (String tok: toks) {
    System.err.printf("%s%n", tok);
}

<强>输出:

...
...
If...Then...:...:Else...:...:...:IfEnd
...

此正则表达式首先匹配从IfEfEnd的文本,并在组#1中捕获它,或者它与冒号匹配。捕获的组#1的反向引用用于替换,同时在其前面添加\n

RegEx Demo