2014-10-07 2 views
1

Как будет идти об извлечении все символы между% 3B и% 2C с использованием регулярных выраженийИспользование Regex и разделителей для извлечения данных

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

Итак, я пытаюсь извлечь строки, которые заканчиваются на букву «Р» снизу. * Важно отметить, что они всегда не заканчиваются на P, поэтому я должен основывать извлечение% 3B и% 2C.

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

Я пробовал следующее, но не имел успеха.

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


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

ответ

3

Проблема с %3B(.*)%2C что * является «жадным», в том смысле, что он будет идти на захват %, 2, C, и так далее. Вы можете изменить это, сделав его неохотно, как это:

%3B(.*?)%2C 

Это решение не так хорошо на длинных строк, хотя, потому что он склонен к catastrophic backtracking. Вы можете улучшить производительность, если вы точно знаете, что содержание между тегами не будет содержать % символ:

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

Если вы хотите, чтобы захватить строку косой, а также добавить |$ до конца маркеров:

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

Demo.

Смежные вопросы