2014-10-07 126 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.