2014-10-07 175 views
1

我怎么会去使用正则表达式使用正则表达式和分隔符来提取数据

%3B09573000P%2C%3B0906000P%2C%3B09593000P%2C%3B09512100P 

所以提取所有%3B和%2C之间的字符,我想提取与“P”结尾的字符串从下面。 *重要的是要注意它们总是不会以P结束,所以我必须以%3B和%2C为基础进行提取。

%3B 
09573000P 
%2C%3B 
0906000P 
%2C%3B 
09593000P 
%2C%3B 
09512100P 

我试过以下,但没有成功。

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


'%3B(.*)%2C' 

回答

3

的问题%3B(.*)%2C*是“贪婪”,在某种意义上说,它会去攻克%2C,等等。您可以通过它不愿,这样的改变:

%3B(.*?)%2C 

该解决方案是不是在长串的那么好,不过,因为很容易出现catastrophic backtracking

%3B([^%]*)%2C 

如果你想捕捉尾随字符串为好,加|$到结束标志:如果你肯定知道的标记之间的内容是不会包含%字符,则可以提高性能:

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

Demo.