首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正则表达式-使用php隔离字符串段

正则表达式-使用php隔离字符串段
EN

Stack Overflow用户
提问于 2013-06-12 22:56:03
回答 2查看 72关注 0票数 0

我有数据字符串:数字、空格,然后是一个可以包含字母、数字和特殊字符以及空格的单词。我只需要隔离第一个数字,然后只隔离单词,这样我就可以将数据重新呈现到表中。

代码语言:javascript
复制
1 foo
2   ba_r
3  foo bar
4   fo-o

编辑:我正在尝试使用"^0-9+“,但是不起作用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-12 23:01:29

代码语言:javascript
复制
$str = <<<body
1 foo
2   ba_r
3  foo bar
4   fo-o
body;

preg_match_all('/(?P<numbers>\d+) +(?P<words>.+)/', $str, $matches);
print_r(array_combine($matches['numbers'],$matches['words']));

输出

代码语言:javascript
复制
Array
(
    [1] => foo
    [2] => ba_r
    [3] => foo bar
    [4] => fo-o
)
票数 2
EN

Stack Overflow用户

发布于 2013-06-12 23:00:45

您可以使用此正则表达式来捕获每一行:

代码语言:javascript
复制
/^(\d+)\s+(.*)$/m

这个正则表达式从每一行开始,捕获一个或多个数字,然后匹配一个或多个空格字符,然后捕获直到行尾的任何字符。

然后,使用preg_match_all(),您可以获得所需的数据:

代码语言:javascript
复制
preg_match_all( '/^(\d+)\s+(.*)$/m', $input, $matches, PREG_SET_ORDER);

然后,您可以从$matches数组中解析出数据,如下所示:

代码语言:javascript
复制
$data = array();
foreach( $matches as $match) {
    list( , $num, $word) = $match;
    $data[] = array( $num, $word);
    // Or: $data[$num] = $word;
}

A print_r( $data); will print

代码语言:javascript
复制
Array
(
    [0] => Array
        (
            [0] => 1
            [1] => foo
        )

    [1] => Array
        (
            [0] => 2
            [1] => ba_r
        )

    [2] => Array
        (
            [0] => 3
            [1] => foo bar
        )

    [3] => Array
        (
            [0] => 4
            [1] => fo-o
        )

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

https://stackoverflow.com/questions/17068701

复制
相关文章

相似问题

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