2016-10-21 5 views
0

У меня есть строка, как это:preg_match_all разделить несколько вхождений

string="59|https://site59.com20|https://site20.com30|https://site30.com16|https://site15.com66|https://site66.com29|https://site29.com";

-Только один пример не только это.

Я сделал это регулярное выражение
preg_match_all("/[0-9][0-9](?:\|)(?:https\:\/\/)(.*?)/", string, string2);

Но это только берет number|https:

Интересно, как я могу получить его и остановить только когда вы найти следующее вхождение регулярного выражения и разделить его на разные массивы

+1

просто взорваться() на трубе – nogad

+0

Что результат, который вы хотите иметь? Как пишет @nogad, 'explode ('|', '59 | https: //site59.com20 | https: //site20.com30 | https: //site30.com16 | https: //site15.com66 | https://site66.com29|https://site29.com ")' будет делать то, что вы хотите, я полагаю – antoni

+0

Я упростил случай. Но есть и другие осложнения, которые не позволяют использовать взрыв. Я должен отделяться, используя регулярное выражение. –

ответ

1

Попробуйте это:

$string="59|https://site59.com20|https://site20.com30|https://site30.com16|https://site15.com66|https://site66.com29|https://site29.com"; 
preg_match_all("/(?:[0-9][0-9](?:\|)(?:https\:\/\/)(.*?)(?=[\d][\d]\||$))|([\d][\d]\|.*)/", $string, $matches); 

Результаты массива в $ совпадений:

[0] => 59|https://site59.com 
[1] => 20|https://site20.com 
[2] => 30|https://site30.com 
[3] => 16|https://site15.com 
[4] => 66|https://site66.com 
[5] => 29|https://site29.com 
0

Попробуйте использовать preg_split

<?php 

$string="59|https://site59.com20|https://site20.com30|https://site30.com16|https://site15.com66|https://site66.com29|https://site29.com"; 

$sites = preg_split("/[0-9][0-9](?:\|)(?:https\:\/\/)(.*?)/", $string); 

foreach($sites as $site){ 
    echo "https://$site\n"; 
} 
https://site59.com 
https://site20.com 
https://site30.com 
https://site15.com 
https://site66.com 
https://site29.com 
Смежные вопросы