2014-11-16 4 views
2

Я борется с проблемой регулярного выражения. Я как-то строил переводчика, и я пытаюсь извлечь строку, окруженную двумя разделителями.regex: Извлечение из строки

Стартовый разделитель будет следующим образом: CONDITIONS DEXTRACTION : Конечный ограничитель будет либо: LISTER or CHARGER

$subject = "CONDITIONS D’EXTRACTION : FAMCNT=&TYCNT 
AND CGAR=&CODGAR 
CHARGER LES PSEUDO VARIABLES : PROPHETE 
FICHIER UTILISE POUR LA REQUETE : &NOMFICHIER1 
CONDITIONS D’EXTRACTION : TYPOLOGIE (CODANAPL2)=&CODEANA6CAR 
LISTER LES DONNEES SUIVANTES : POLNO, CVGNO, DTREDUCTION 
FICHIER UTILISE POUR LA FICHIER REQUETE : SDCONT 
CONDITIONS D’EXTRACTION : CDPROD=\'OBS\' 
AND CDETATCTR=20, 21, 22, 23, 24, 25, 26, 27, 65, 66 
AND VERIFONNUM=3 
LISTER LES DONNEES" 

Шаблон я сделал использование: /CONDITIONS D’EXTRACTION :(.*)(?=[AND\s]*)*/ Заменено: (WHERE=(\1))

Результат сопоставления регулярное выражение не будет принимать все условия, в которых:

- (WHERE=(FAMCNT=&TYCNT)) AND CGAR=&CODGAR CHARGER 
- (WHERE=(TYPOLOGIE (CODANAPL2)=&CODEANA6CAR)) LISTER 
- (WHERE=(CDPROD='OBS')) AND CDETATCTR=20, 21, 22, 23, 24, 25, 26, 27, 65, 66 AND VERIFONNUM=3 LISTER 

я не могу управлять, чтобы создать регулярное выражение возвращения:

- (WHERE=(FAMCNT=&TYCNT AND CGAR=&CODGAR)) 
-(WHERE=(TYPOLOGIE (CODANAPL2)=&CODEANA6CAR)) 
- (WHERE=(CDPROD='OBS' AND CDETATCTR=20, 21, 22, 23, 24, 25, 26, 27, 65, 66 AND VERIFONNUM=3 )) 

Есть ли у вас какие-нибудь идеи?

Thx

+0

@vks Последний блок кода должен быть выход. '(WHERE = (\ 1))'. Я пробовал следующее regexp в блокноте ++: '^ УСЛОВИЯ D ['|'] EXTRACTION: (. *?) (LISTER | CHARGER)' Кажется, что работает, но используется с php/preg-replace –

ответ

0
CONDITIONS D’EXTRACTION :([\s\S]*?)(?:CHARGER|LISTER) 

Заменить (WHERE=($1)) .Увидь демо.

http://regex101.com/r/lZ5mN8/6

+0

Спасибо много, все работает отлично. Спасибо за webtool! –

+0

@ theowl-Yte приветствую :) – vks

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