我正在努力学习正则表达式。我有字符串:
$x = "5ft2inches";
如何使用正则表达式将[5,2]读入数组?
答案 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]/`