Как разделить строку alphanumeri c по символам с помощью регулярных выражений? - PullRequest
0 голосов
/ 28 января 2020

У меня есть ряд строк в виде

10a99b5c
55
2a3b1
g

Как я могу разделить строку по символам (которая всегда отображается как один символ между числами или в начале / конце строки )

array([0] => 10a99b5c, [1] => 10, [2]=> a99, [3] => b5, [4] => c),
array([0] => 55, [1] => 55),
array([0] => 2a3b1, [1] => 2, [2] => a3, [3] => b1),
array([0] => g, [1] => g),

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

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

Ответы [ 2 ]

1 голос
/ 28 января 2020

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

$input = ['10a99b5c','55','2a3b1','g'];
$regEx = '~([a-z]\d*)~';

foreach($input as $str){
  $res[] = preg_split($regEx,$str,-1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
}
echo '<pre>';
var_export($res);

Результат для примеров выше:

array (
  0 => 
  array (
    0 => '10',
    1 => 'a99',
    2 => 'b5',
    3 => 'c',
  ),
  1 => 
  array (
    0 => '55',
  ),
  2 => 
  array (
    0 => '2',
    1 => 'a3',
    2 => 'b1',
  ),
  3 => 
  array (
    0 => 'g',
  ),
) 
1 голос
/ 28 января 2020

Регулярное выражение:

/ [az] * [0-9] * /

  • [az] будет соответствовать любому (строчные буквы ) символ
    • ноль или более раз
  • [0-9] будет соответствовать номеру
    • ноль или более раз

https://regex101.com/r/Ox4yUh/1

...