字符和任何数字之间的preg_match

时间:2012-10-24 18:27:21

标签: php preg-match

我写了一篇preg_match

我有一个字符串:

XPMG_ar121023.txt

并且需要提取XPMG_和第一个数字之间的2个字母 - 是0-9

$str = 'XPMG_ar121023.txt';
preg_match('/('XPMG_')|[0-9\,]))/', $str, $match);
print_r($match);

也许这不是最佳选择:我的角色永远是

4 个答案:

答案 0 :(得分:2)

你可以做到

$str = "XPMG_ar121023.txt" ;
preg_match('/_([a-z]+)/i', $str, $match);
var_dump($match[1]);

输出

string 'ar' (length=2)

答案 1 :(得分:1)

这对于正则表达式来说太简单了。只需$match = substr($str,5,3)即可获得您所要求的内容。

答案 2 :(得分:1)

让我逐步介绍这一点,以帮助您解决将来出现的类似问题。假设我们的文件名具有以下格式:

XPMG_ar121023.txt

我们知道我们想捕获什么,我们想要在_之后和数字开始之前的“ar”。所以我们的表达式看起来像这样:

_[a-z]+

这非常简单。我们首先寻找下划线,然后是a和z之间的任意数量的字母。方括号定义了一个字符类。我们的班级由字母表组成,但如果您愿意,可以在那里推送特定的数字。

现在因为我们只想捕捉字母,我们需要在模式的那一部分附近加上括号:

_([a-z]+)

在结果中,我们现在只能访问该子模式。接下来,我们将分隔符放在适当的位置,以指定模式的开始和结束位置:

/_([a-z]+)/

最后,在我们的结束分隔符之后,我们可以添加一些修饰符。在编写时,我们的模式只查找小写字母。我们可以添加i修饰符以使此不区分大小写:

/_([a-z]+)/i
瞧,瞧,我们已经完成了。现在我们可以将其传递到preg_match以查看它吐出的内容:

preg_match( "/_([a-z]+)/i", "XPMG_ar121023.txt", $match );

此函数将一个模式作为第一个参数,将一个匹配的字符串作为第二个参数,最后一个变量将结果吐入。完成所有操作后,我们可以检查$match我们的数据。

此操作的结果如下:

array(2) { 
    [0]=> string(3) "_ar" 
    [1]=> string(2) "ar" 
}

这是$match的内容。请注意,我们的完整模式位于数组的第一个索引中,而我们捕获的部分则在数组的第二个索引中提供。

echo $match[1]; // ar

希望这有帮助。

答案 3 :(得分:0)

好吧,为什么不呢:

$letters = $str[5].$str[6];

:) 毕竟,你总是需要固定前缀之后的2个字符,有许多方法不需要正则表达式(substr()无论如何都是最好的)