我无法在这个问题上找到解决方案。在正则表达式中它甚至可能吗?
我有这个样本:
...:...:If...Then...:...:Else...:...:...:IfEnd:...
我想将我的字符串拆分为冒号,而不是我的if语句中的冒号。
类似的东西:
...
...
If...Then...:...:Else...:...:...:IfEnd
...
我搜索了其他问题,但所有问题都有1个字符的分隔符,您可以使用[^set]
来解决问题。 这种情况可以使用正则表达式吗?
我甚至没有半工作的正则表达式解决方案,因为我尝试过的都没有。哈哈。
如果你想知道我在做什么。我正在尝试创建一个解析一些脚本的应用程序。系统将分隔语句并分别解析每一行。但是由于显而易见的原因,将if语句/ while循环/ for循环分开是行不通的。 我认为解决方案不是传统的,或者是不正确的吗?
答案 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
...
此正则表达式首先匹配从If
到EfEnd
的文本,并在组#1中捕获它,或者它与冒号匹配。捕获的组#1的反向引用用于替换,同时在其前面添加\n
。