如何使用正则表达式按字符拆分字母数字字符串?

How to split an alphanumeric string by its characters using regex?

我有一系列形式为

的字符串
10a99b5c
55
2a3b1
g

如何按字符拆分字符串(在数字之间或字符串的 beginning/end 中始终显示为单个字符)

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),

输出格式不重要,我可以处理,我只是不知道什么样的正则表达式模式可以做到这一点(即使是提示也足够了)。

我使用 preg_replace_callback 执行此操作,其中我使用为每个字符找到的数字进行一组计算。

正则表达式:

/[a-z]*[0-9]*/

  • [a-z] 将匹配任何(小写)字符
    • 零次或更多次
  • [0-9] 将匹配一个数字
    • 零次或更多次

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

试试这个:

$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',
  ),
)