2013-10-31 129 views
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)或創建的文本結束。

回答

2

我會建議使用哈姆扎的方法,用少許其他的調整:

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

regex101 demo

您也可以嘗試的東西像這樣,雖然處理時間可能稍長:

如果你想匹配,直到

regex101 demo

(?:(?!F\)).)+將匹配除了F)

什麼,你可以很容易地將它添加到正則表達式:

E\)((?:(?!F\)|CREATED:).)+) 
+0

最後一部分解決了它!大演示網站,我不知道那個! :) –

1

不要使用DOTALL和使用複線:

/^E\).*$/im 
+1

[E_DOESN'T_WORK(HTTP: //regex101.com/r/hC0qX7) – HamZa

+0

@HamZa:它確實可以在你的演示中通過匹配:'E)UPPER LIMIT ES R16C KUNGSANGEN提升到2300 FT AMSL' – anubhava

+0

嗯,它不清楚在問題,但我解釋爲匹配,直到'SOURCE:EUECYIYN' - 我可能是錯誤的 – HamZa

相關問題