Регулярное выражение - расчленить строку на основе символа backsla sh, который имеет несовместимые вхождения - PullRequest
0 голосов
/ 09 июля 2020

Я использую laravel php и пытаюсь превратить строку в массив. строка всегда содержит символ sla sh, но этот символ может встречаться много раз:

Пример:

  • входная строка: "abcd\\efg\\\\hij\klm\\\\\\\opq"

  • ожидаемый массив: [abcd, efg, hij, klm, opq]

Я пытался использовать функцию str_replace для замены '\' на '', но это дает неправильные результаты, так как у меня не будет никакого разделителя для использования при взрыве моей строки.

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

Надеюсь, кто-нибудь может помочь мне в этом вопросе.

Ответы [ 2 ]

2 голосов
/ 09 июля 2020

Вы можете использовать preg_split с регулярным выражением /+ (соответствует одному или нескольким / символам) для разделения на подстроку переменной длины из / символов:

См. Используемый код здесь

<?php

$string = "abcd//efg////hij/klm//////opq";
var_dump(preg_split('`/+`', $string));

Обновление

Обновлено, поскольку OP изменил разделительный символ и строку на backsla sh \.

Подобно прямому sla sh, показанному выше, backsla sh также можно сопоставить с помощью регулярного выражения \\\\+. Вам нужно избежать обратной косой черты для строки и регулярного выражения, поэтому \\\\+ становится строкой \\+, которая становится необработанным регулярным выражением \+:

См. Используемый здесь код

<?php

$string = "abcd\\efg\\\\hij\klm\\\\\\\opq";
var_dump(preg_split('/\\\\+/', $string));
0 голосов
/ 09 июля 2020

Вы можете сделать это по следующему алгоритму:

$mystring = "abcd\\efg\\\\hij\klm\\\\\\\opq";

$my_arr=[];

while(strpos($mystring, "\\")!==false){
    $pos=strpos($mystring, "\\");
    if ($pos==0) {
        $mystring=substr($mystring,1);
        continue;
    }
    $my_arr[]=substr($mystring,0,$pos);
    $mystring=substr($mystring,$pos+1);
}
$my_arr[]=$mystring;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...