java正则表达式提取

java正则表达式提取,java,regex,Java,Regex,我有一个字符串,它有重复的管道符号 String Maindata="1370491695866|223|0|statement| select max(IF_ID) from IF_OPERATIONS.IF_Mediator|select max(IF_ID) from IF_OPERATIONS.IF_Mediator"; 我需要提取字符串的最后一部分 从最后一个“|”符号到“;”分号(包括“;”)。就这样吧 从IF\u操作中选择max(IF\u ID)。IF\u Mediator 我试

我有一个字符串,它有重复的管道符号

String Maindata="1370491695866|223|0|statement| select max(IF_ID) from IF_OPERATIONS.IF_Mediator|select max(IF_ID) from IF_OPERATIONS.IF_Mediator";
我需要提取字符串的最后一部分

从最后一个“|”符号到“;”分号(包括“;”)。就这样吧

从IF\u操作中选择max(IF\u ID)。IF\u Mediator

我试过了,但由于“|”符号重复出现,我只得到了

223 | 0 |语句|从IF|u操作中选择max(IF|u ID)。IF|u Mediator |从IF|u操作中选择max(IF|u ID)。IF|u Mediator

我需要分号也出现。
如果有人知道这一点,这将是一个很大的帮助。

您不需要正则表达式,这不是一个奇迹般的解决方案:

String mainData = "1370491695866|223|0|statement| select max(IF_ID) from IF_OPERATIONS.IF_Mediator|select max(IF_ID) from IF_OPERATIONS.IF_Mediator;";
String last = mainData.substring(mainData.lastIndexOf('|') + 1);
System.out.println(last);
结果:

run:
select max(IF_ID) from IF_OPERATIONS.IF_Mediator;
BUILD SUCCESSFUL (total time: 0 seconds)
如果您可能需要其他令牌,还可以使用
split()
方法:

String[] tokens = mainData.split("\\|");
System.out.println(tokens[tokens.length - 1]);

\
被转义是因为它在正则表达式中有一个特殊的含义,这就是
split()
所使用的,
\
也被转义,因此
\\\
为什么不试试String.lastIndexOf(“|”)呢然后从索引中提取一个子字符串,直到字符串的结尾。非常感谢,但是我需要验证这个输入(因为结构可能会改变),这就是我使用regex的原因。这个输入可能也会改变。所以我认为正则表达式将是一个很好的解决方案。我写了一个正则表达式来验证[0-9]+\\\\\+[0-9]+\\\\\\\\\\+[0]+\\\\\\\\\\\\\+[a-z]+\\\\\\\\\\\+[a-Za-z.]+\\\\\\\\\\\\\\\\\\\+[a-Za-z.[+\\\\\\\\\\\\\\\\\\\;谢谢你的帮助
String[] tokens = mainData.split("\\|");
System.out.println(tokens[tokens.length - 1]);