2017-01-24 4 views
-1

私は正規表現を学ぼうとしましたが、それを早く学ぶのは難しく、問題があります。Regex - json fetch

B0679/17 NOTAMN Q)EPWW/QFALC/IV/NBO/A/000/999/5133N02154E005 A)EPDE B)1701241325 C)1701242100 E:私はこのように見えるメッセージのlaravelいくつかの種類に表示します)LDGとTKOFのためのAD CLSDは、RWY、TWY、APRONのICEによる。

それがインラインだと、今私はこのような形式で表示したい:今、私のPHPはこのようになります

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 

$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)B)B)の下にA)を表示したい。今私はインラインを表示する – tomczas

+0

は配列としてすることができます – tomczas

答えて

0

実際、見て私はそれに既にキャリッジリターンを持っているデータを見る。もちろん、これらはこれだけnl2br()を使用し、HTMLには表示されません。

$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]→エスケープ表記、→は)の文字にマッチしZ
  • \)Aからすべての大文字に一致する
  • .*?→任意の文字に一致する0回以上(ただし、できるだけ少ない)
  • (?=)→シーケンスの肯定先読み(前のセレクタの後にある必要があります)
  • [A-Z]\)|$→eiと一致しますTHER )続く任意の大きな文字や文字列ここで

の終わりには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));