2017-01-24 44 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));