Php 正则表达式,不同的结束字符串
我正在尝试匹配E)“列”的所有内容 使用以下正则表达式:Php 正则表达式,不同的结束字符串,php,regex,Php,Regex,我正在尝试匹配E)“列”的所有内容 使用以下正则表达式: preg_match_all('/E\)(.*)(?=F\))/is', $string, $output); 我已经设法获得了数据,但只要F)列存在,它就不会一直这样做。有时它的结局就像: A1147/13 NOTAMN Q) ESAA/QRRCH/IV/BO /AW/000/023/5933N01746E002 A) ESSA B) 1311140900 C) 1311211500 D) 14 21 0900-1500 E) UPP
preg_match_all('/E\)(.*)(?=F\))/is', $string, $output);
我已经设法获得了数据,但只要F)列存在,它就不会一直这样做。有时它的结局就像:
A1147/13 NOTAMN
Q) ESAA/QRRCH/IV/BO /AW/000/023/5933N01746E002
A) ESSA B) 1311140900 C) 1311211500
D) 14 21 0900-1500
E) UPPER LIMIT ES R16C KUNGSANGEN RAISED TO 2300 FT AMSL
REF AIP ENR 5.1
CREATED: 30 Oct 2013 10:00:00
SOURCE: EUECYIYN
如何解决这个问题
编辑: 这是我想返回的部分:
UPPER LIMIT ES R16C KUNGSANGEN RAISED TO 2300 FT AMSL
REF AIP ENR 5.1
它将以F)列的开头或创建的文本结尾。不要使用DOTALL,而是使用多行:
/^E\).*$/im
我建议使用HamZa的方法,并进行一些其他调整:
E\)(.*?)(?=F\)|$)
您也可以尝试类似的方法,但处理时间可能会稍长一些:
E\)((?:(?!F\)).)+)
(?:(?!F\))+
将匹配除F)
如果要在创建之前进行匹配:,可以轻松地将其添加到正则表达式中:
E\)((?:(?!F\)|CREATED:).)+)
@哈姆扎:在你的演示中,它确实通过匹配起作用:
E)上限ES R16C KUNGSANGEN上升到2300英尺AMSL
Hmmm问题中不清楚,但我解释为匹配,直到来源:EUECYIYN
--我可能wrong@HamZa:我可能错了,但根据我试图匹配E)“列的所有内容.
I解释为从E开始的完整行)
最后一部分解决了它!很棒的演示站点,我不知道那个
E\)((?:(?!F\)|CREATED:).)+)