如何使用正则表达式从字符串中提取所有整数值?

时间:2009-08-27 00:03:28

标签: php regex

我正在努力学习正则表达式。我有字符串:

$x = "5ft2inches";

如何使用正则表达式将[5,2]读入数组?

8 个答案:

答案 0 :(得分:5)

如果您假设字符串的格式为“{number} ft {number} inches”,那么您可以使用preg_match()

preg_match('/(\d+)ft(\d+)inches/', $string, $matches);

(\d+)将匹配一个或多个数字的字符串。括号将告诉preg_match()将匹配的数字放入$matches变量(函数的第三个参数)。如果匹配则该函数将返回1,如果不匹配则返回0。

以下是成功比赛后$matches的样子:

Array
(
    [0] => 5ft2inches
    [1] => 5
    [2] => 2
)

整个匹配的字符串是第一个元素,然后是带括号的匹配项。所以要制作你想要的阵列:

$array = array($matches[1], $matches[2]);

答案 1 :(得分:2)

Perl:

#!/usr/bin/perl

use strict;
use warnings;

my $x = "5ft2inches";
my %height;
@height{qw(feet inches)} = ($x =~ /^([0-9]+)ft([0-9]+)inches$/);

use Data::Dumper;
print Dumper \%height;

输出:

$VAR1 = {
          'feet' => '5',
          'inches' => '2'
        };

或者,使用split

@height{qw(feet inches)} = split /ft|inches/, $x;

答案 2 :(得分:2)

假设PHP,没有人建议拆分的任何理由?

$numbers = preg_split('/[^0-9]+/', $x, -1, PREG_SPLIT_NO_EMPTY);

答案 3 :(得分:1)

正则表达式只是/[0-9]+/但是如何将它放入数组中完全取决于您正在使用的编程语言。

答案 4 :(得分:1)

使用正则表达式,您可以以无环境方式或上下文方式提取数据。

IE,如果您匹配任何数字:(\d+)注意:假设您的语言尊重\ d作为'任意数字'的快捷方式

然后你可以提取每个组,但是你可能不知道你的字符串实际上是“5 2inches”而不是“6ft2inches”或“29Cabbages1Fish4Cows”。

如果您添加上下文:(\d+)ft(\d+)inches

你知道确定你提取的是什么(因为否则你不会得到匹配)并且可以依次引用每个组来获得英尺和英寸。

如果您不总是要提取一对数字,则需要使各种组件可选。查看This Regular Expression Cheat Sheet(他的其他备忘单也很漂亮)了解更多信息,

答案 5 :(得分:0)

你没有提到你正在使用的语言,所以这里是一般的解决方案:你没有“提取”数字,你用一个空字符串替换除数字之外的所有内容。

在C#中,这看起来像

string numbers = Regex.Replace(dirtyString, "[^0-9]", "");

答案 6 :(得分:0)

必须注意两位数字。

/ \ d {1,2} /

对于英尺和英寸,

可能会更好一些。 “2”的最大值应该增加到适当的值。

答案 7 :(得分:0)

use `/[\d]/`