Java 使用正则表达式和分隔符提取数据

Java 使用正则表达式和分隔符提取数据,java,regex,extraction,Java,Regex,Extraction,如何使用正则表达式提取%3B和%2C之间的所有字符 %3B09573000P%2C%3B0906000P%2C%3B09593000P%2C%3B09512100P 所以,我试图从下面提取以“p”结尾的字符串*重要的是要注意,它们始终不会以P结尾,因此我必须以%3B和%2C作为提取的基础 %3B 09573000P %2C%3B 0906000P %2C%3B 09593000P %2C%3B 09512100P 我试过下列方法,但没有成功 '[(^%3B)(^%2B)]' '%3B(.

如何使用正则表达式提取%3B和%2C之间的所有字符

%3B09573000P%2C%3B0906000P%2C%3B09593000P%2C%3B09512100P
所以,我试图从下面提取以“p”结尾的字符串*重要的是要注意,它们始终不会以P结尾,因此我必须以%3B和%2C作为提取的基础

%3B
09573000P
%2C%3B
0906000P
%2C%3B
09593000P
%2C%3B
09512100P
我试过下列方法,但没有成功

'[(^%3B)(^%2B)]'


'%3B(.*)%2C'
%3B(.*)%2C
的问题在于
*
是“贪婪的”,即它将继续捕获
%
2
C
,等等。您可以通过使其不情愿来改变这一点,如下所示:

%3B(.*?)%2C
不过,这种解决方案在长字符串上效果不太好,因为它容易出错。如果确定标记之间的内容不会包含
%
字符,则可以提高性能:

%3B([^%]*)%2C
如果还要捕获尾随字符串,请将
|$
添加到结束标记:

%3B([^%]*)(?%2C|$)