首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用正则表达式匹配所有以4位结尾的子字符串

使用正则表达式匹配所有以4位结尾的子字符串
EN

Stack Overflow用户
提问于 2016-11-03 21:42:27
回答 2查看 2.4K关注 0票数 18

我正尝试在php中拆分一个字符串,如下所示:

代码语言:javascript
复制
ABCDE1234ABCD1234ABCDEF1234

转换为字符串数组,在本例中,将如下所示:

代码语言:javascript
复制
ABCDE1234
ABCD1234
ABCDEF1234

因此,模式是“未定义的字母数量,然后是4位数字,然后是未定义的字母数量和4位数字等等。”

我尝试使用preg_split拆分字符串,如下所示:

代码语言:javascript
复制
$pattern = "#[0-9]{4}$#";
preg_split($pattern, $stringToSplit);

并且它返回一个在第一个元素中包含完整字符串(未拆分)的数组。

我猜这里的问题是我的正则表达式,因为我不完全理解如何使用它们,并且我不确定我是否正确地使用它。

那么正确的正则表达式应该是什么呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-03 21:51:39

你不想要preg_split,你想要preg_match_all

代码语言:javascript
复制
$str = 'ABCDE1234ABCD1234ABCDEF1234';
preg_match_all('/[a-z]+[0-9]{4}/i', $str, $matches);
var_dump($matches);

输出:

代码语言:javascript
复制
array(1) {
  [0]=>
  array(3) {
    [0]=>
    string(9) "ABCDE1234"
    [1]=>
    string(8) "ABCD1234"
    [2]=>
    string(10) "ABCDEF1234"
  }
}
票数 16
EN

Stack Overflow用户

发布于 2016-11-03 21:58:18

我不擅长正则表达式,所以下面是较少人使用的方法:

代码语言:javascript
复制
<?php
$s = 'ABCDE1234ABCD1234ABCDEF1234';
$nums = range(0,9);

$num_hit = 0;
$i = 0;
$arr = array();

foreach(str_split($s) as $v)
{
    if(isset($nums[$v]))
    {
        ++$num_hit;
    }

    if(!isset($arr[$i]))
    {
        $arr[$i] = '';
    }

    $arr[$i].= $v;

    if($num_hit === 4)
    {
        ++$i;
        $num_hit = 0;
    }
}

print_r($arr);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40403041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档