正则表达式:从字符串中提取

时间:2014-11-16 10:35:52

标签: php regex preg-replace

我一直在努力解决正则表达式问题。 我正在以某种方式构建一个翻译器,我正在尝试提取一个由两个分隔符包围的字符串。

起始分隔符为: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条件:

- (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

1 个答案:

答案 0 :(得分:0)

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

替换为(WHERE=( $1 ))。请参阅演示。

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