2017-01-24 43 views
-1

我試圖學習正則表達式,但很難快速學習它,並且遇到問題。我在laravel顯示某種消息中的哪看起來像這樣:正則表達式 - json獲取

B0679/17 NOTAMN Q)EPWW/QFALC/IV/NBO/A/000/999/5133N02154E005 A)EPDE B)1701241325 C)1701242100È )適用於LDY和TKOF由於在RWY,TWY和APRON冰上的AD CLSD。

這是內聯和,現在我想在格式像這樣顯示出來:

Q) EPWW/QFALC/IV/NBO/A /000/999/5133N02154E005 
A) EPDE 
B) 1701241325 
C) 1701242100 
E) AD CLSD FOR LDG AND TKOF DUE TO ICE ON RWY,TWY AND APRON. 

現在我的PHP看起來是這樣的:

<?php 

$url = "http://api.vateud.net/notams/EPDE.json"; 
$ch = curl_init(); 
curl_setopt($ch,CURLOPT_URL,$url); 
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); 
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT, 4); 
$json = curl_exec($ch); 
if(!$json) { 
    echo curl_error($ch); 
} 
curl_close($ch); 
$obj= json_decode($json); 

foreach($obj as $o=>$key){ 

    echo $key->raw . '<br />' ; 
    echo '<br /><br />'; 
} 
?> 
+0

看起來你忘了在你的問題中包含一個問題。 – Biffen

+0

我想顯示每個部分A)B)C)在每個下面A)在A B)下B C)。現在它顯示我內聯 – tomczas

+0

可以作爲數組 – tomczas

回答

0

其實,看着我看到它的數據已經有回車。當然,這些不會顯示在HTML,所以只需使用nl2br()

$data = json_decode(file_get_contents("http://api.vateud.net/notams/EPDE.json")); 
foreach ($data as $obj) { 
    echo nl2br($obj->raw); 
} 

另一種選擇是使用<pre>元素,這使該數據的用戶可能被用來將等寬字體。這將在數​​據已經打印出回車:

$data = json_decode(file_get_contents("http://api.vateud.net/notams/EPDE.json")); 
foreach ($data as $obj) { 
    echo "<pre>" . htmlspecialchars($obj->raw) . "</pre>"; 
} 

我原來的正則表達式的答案:

$data = json_decode(file_get_contents("http://api.vateud.net/notams/EPDE.json")); 
foreach ($data as $obj) { 
    echo preg_replace("/([A-Z]+\))/", "\n$1", $obj->raw) . "<br/>\n"; 
} 

在這兩種情況下,拋棄複雜的捲曲廢話,只是使用file_get_contents()

0

如果我理解正確的,你正在嘗試在每個A)之前添加一些換行符,等等。您可以使用以下正則表達式查找每個匹配項:

[A-Z]\).*?(?=[A-Z]\)|$) 
  • [A-Z]→從AZ
  • \)每一個大寫字母→一)字符匹配匹配,躲過符號
  • .*?→任何字符匹配0次以上(但儘可能少)
  • (?=)→對於一個序列的正向前向(必須在前一個選擇器之後)
  • [A-Z]\)|$→匹配ei療法任何大寫字母后跟一個)或字符串

這裏到底是在JavaScript的例子:

var text = "B0679/17 NOTAMN Q) EPWW/QFALC/IV/NBO/A /000/999/5133N02154E005 A) EPDE B) 1701241325 C) 1701242100 E) AD CLSD FOR LDG AND TKOF DUE TO ICE ON RWY,TWY AND APRON."; 
 
var regex = /[A-Z]\).*?(?=[A-Z]\)|$)/g; 
 

 
console.log(text.match(regex));