Как отделить буквы, цифры, дешифровку и тире от строки PHP - PullRequest
0 голосов
/ 12 июня 2018

Я пытаюсь разбить строку следующим образом:

$string = letters1234_1-someMoreText;

Выходные данные должны быть:

$string_split [letters1234, 1, someMoreText];

Только если строка соответствует требуемому отцу.

if(preg_match('/^([A-Z]+)([0-9])([_])([0-9])([-])/', $string)) {
       $string_split = preg_split('/^([A-Z]+[0-9]+)([_])([0-9])([-])([A-Z]+[0-9]+)/', $string);
}else{
       $string_split = $string;
}

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

1 Ответ

0 голосов
/ 12 июня 2018

Вы можете использовать свое текущее регулярное выражение (и добавить .* к нему, чтобы он соответствовал хвосту строки) с функцией preg_match и использовать группы захвата для захвата частейВы должны получить в результате.В вашем случае просто сверьтесь с preg_match, и как только совпадение будет найдено, присвойте найденные захваты переменной $string_split:

$string = "letters1234_1-someMoreText";
$string_split = $string;
if (preg_match('/^([A-Z]+[0-9]+)_([0-9])-(.*)/si', $string, $matches)) {
    array_shift($matches);
    $string_split = $matches;
}
print_r($string_split);

См. PHP-демо , получив

Array
(
    [0] => letters1234
    [1] => 1
    [2] => someMoreText
)

Детали шаблона

  • ^ - начало строки
  • ([A-Z]+[0-9]+) - Захват группы 1: следуют одна или несколько буквс 1+ цифрами
  • _ - символ подчеркивания
  • ([0-9]) - группа захвата 2: цифра
  • - - дефис
  • (.*) - любые 0+ символов

Модификаторы is делают регистр нечувствительным к регистру, а . может соответствовать символам разрыва строки.

...