1

我试图匹配 E)“列”的所有内容。

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
F) GND G) 2300FT AMSL
CREATED: 30 Oct 2013 10:00:00 
SOURCE: EUECYIYN

使用以下正则表达式:

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) 列的开头或文本 CREATED 结束。

4

2 回答 2

2

我建议使用 HamZa 的方法,并进行一些其他调整:

E\)(.*?)(?=F\)|$)

正则表达式101演示

您也可以尝试这样的事情,尽管处理时间可能会更长一些:

E\)((?:(?!F\)).)+)

正则表达式101演示

(?:(?!F\)).)+将匹配任何东西,除了F)

如果您想匹配 until CREATED:,您可以轻松地将其添加到正则表达式中:

E\)((?:(?!F\)|CREATED:).)+)
于 2013-10-31T16:52:02.153 回答
1

不要使用 DOTALL 并使用 MULTILINE:

/^E\).*$/im
于 2013-10-31T16:47:52.710 回答