我一直在努力解决正则表达式问题。 我正在以某种方式构建一个翻译器,我正在尝试提取一个由两个分隔符包围的字符串。
起始分隔符为: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
答案 0 :(得分:0)
CONDITIONS D’EXTRACTION :([\s\S]*?)(?:CHARGER|LISTER)
替换为(WHERE=( $1 ))
。请参阅演示。