java - 正则表达式 - 在 `:` 上分割字符串,但不在 if 语句内分割字符串

标签 java regex

我自己无法找到解决这个问题的方法。在正则表达式中是否可能?

我有这个样本:

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

我想用冒号分割字符串,而不是 if 语句中的冒号。

类似于:

  1. ...
  2. ...
  3. 如果...则...:...:Else...:...:...:IfEnd
  4. ...

我搜索了其他问题,但都是1个字符的分隔符,你可以用[^set]解决问题。 正则表达式可以实现这种情况吗?

我什至没有半有效的正则表达式解决方案,因为我尝试过的所有方法都不起作用。哈哈。

如果你想知道我在做什么。我正在尝试创建一个应用程序来解析一些脚本。系统将分离语句并单独解析每一行。但由于显而易见的原因,分离 if 语句/while 循环/for 循环将无法正常工作。 我的解决方案的思考方式是否不传统或不正确?

最佳答案

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

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

关于java - 正则表达式 - 在 `:` 上分割字符串,但不在 if 语句内分割字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40961028/

相关文章:

正则表达式匹配空格和数字后面的单词

php - 如何使用 PHP 删除重复的换行符

java - 什么是 keystore ?

java - 将 ACE 与 WT 一起使用

javascript - 将 PHP 正则表达式转换为 Javascript

php - 如何使用 php 删除转义的正斜杠?

java - 向所有客户端发送消息(客户端 - 服务器通信)

java - 在没有中间类的情况下将数据插入到 JavaFX TableView

Java Hibernate ID 问题

javascript - 如何缩小正则表达式验证失败的原因?