Php 正则表达式,不同的结束字符串

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

我正在尝试匹配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) 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:).)+)