当响应处于多行或单行时,PHP列表功能

时间:2017-04-05 23:23:54

标签: php regex list preg-match

我使用CURL方法发布和接收来自SMS聚合器的响应。

$url = "https://www.smsgatewaycenter.com/library/send_sms_2.php?".$request;
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$curl_scraped_page = curl_exec($ch);
curl_close($ch);    
list ($status, $returnmobileno, $statusdetails) = split('\|', $curl_scraped_page);

现在,当我发送像这样的单个短信时,我的聚合器会以单一形式给出响应

 $curl_scraped_page = "success | 919********** | 659613958369444158-117942947553648183"; //THIS IS EXAMPLE 

所以我使用list函数在连字符前得到唯一的id 659613958369444158。我一直很好,直到我收到一个回复​​,但当我得到响应时,我无法从响应中获得第一个唯一ID。

多行响应

 success | 917*********| 3287615453600499019-106346209426268709 
 success | 919********* | 3287615453600499019-483762398162272572 
 success | 9196********** | 3287615453600499019-204615952244351373 

或单线多重响应

success | 917*********| 3287615453600499019-106346209426268709 success | 919********* | 3287615453600499019-483762398162272572 success | 9196********** | 3287615453600499019-204615952244351373 

从上面给出多线或单线多响应。我只需要抓住success/error3287615453600499019并将其存储在我的数据库中。

使用preg_match()以某种方式丢失了它。

我该怎样才能实现呢?我在尝试了3个小时并在这里寻求帮助后终于放弃了。

1 个答案:

答案 0 :(得分:1)

/(\d+)-/应该可以正常工作,将所需的数字放入capture group

<?php
$str = "success | 917*********| 3287615453600499019-106346209426268709 success | 919********* | 3287615453600499019-483762398162272572 success | ";
if (preg_match("/(success|error) \|.*?\| (\d+)-(\d+)/", $str, $matches)) {
    echo "$matches[1] - $matches[2]";
} else {
    // no match
}

输出:

3287615453600499019