我使用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/error
和3287615453600499019
并将其存储在我的数据库中。
使用preg_match()
以某种方式丢失了它。
我该怎样才能实现呢?我在尝试了3个小时并在这里寻求帮助后终于放弃了。
答案 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