【问题标题】:Convert string to an array containing number and alphabet using regex in php?在php中使用正则表达式将字符串转换为包含数字和字母的数组?
【发布时间】:2017-04-16 10:41:59
【问题描述】:

我有一个包含字母或数字的字符串。

AB1D21E48EFGHI1K

我正在尝试将该字符串分解为数组,如下所示。

[0] => A
[1] => B
[2] => 1
[3] => D
[4] => 21
[5] => E
[6] => 48
[7] => E
[8] => F
[9] => G
[10] => H
[11] => I
[12] => 1
[13] => K

但是,我得到如下数组:

[0] => Array (
    [0] => AB
    [1] => 1
    [2] => D
    [3] => 21
    [4] => E
    [5] => 48
    [6] => EFGHI
    [7] => 1
    [8] => K
)

到目前为止,我已经尝试过以下代码。

$string = 'AB1D21E48EFGHI1K';
preg_match_all('/([0-9]+|[a-zA-Z]+)/', $string, $matches);
print_r($matches);

【问题讨论】:

  • 你想要的输出?
  • 使用([0-9]+|[a-zA-Z]{1})或更简单的(\d+|\w{1})
  • @Mohammad,谢谢。它有帮助

标签: php regex string preg-match-all


【解决方案1】:

您应该删除单词字符后的+ 以匹配长度1。所以你的正则表达式应该是

/([0-9]+|[a-zA-Z])/

你可以让你的正则表达式更简单

/\d+|\w/

代码改为

$string = 'AB1D21E48EFGHI1K';
preg_match_all('/\d+|\w/', $string, $matches);
print_r($matches);

demo查看结果

【讨论】:

  • [0-9]+|[a-zA-Z]
  • \w[a-zA-Z] 不同
  • @Toto 你是对的,但在这种情况下它工作正常。
【解决方案2】:

请尝试这种方式,它可能对你有用

<?php
$data = array(0 => AB,1 => 1, 2 => D, 3 => 21, 4 => E, 5 => 48, 6 => EFGHI, 7 => 1, 8 => K);

/*print "<pre>";
print_r($data);
print "<pre>";*/


$new_data = array();
foreach($data as $key => $value){

  if (!preg_match('/[^A-Za-z]/', $value)) // '/[^a-z\d]/i' should also work.
  {
    // string contains only english letters
    $arr1 = str_split($value);
    foreach($arr1 as $row => $val){
      $new_data[] = $val;
    }
  }else{
    $new_data[] = $value;
  }

}

/*
 print "<pre>";
 print_r($new_data);
 print "<pre>";*/

?>

【讨论】:

  • $data 来自哪里?
  • 根据上述问题,我创建了一个 $data 数组,其中数据以用户问题格式存储。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-12-03
  • 1970-01-01
  • 2018-03-08
  • 1970-01-01
  • 1970-01-01
  • 2019-09-19
  • 1970-01-01
相关资源
最近更新 更多