我写了一篇preg_match
我有一个字符串:
XPMG_ar121023.txt
并且需要提取XPMG_
和第一个数字之间的2个字母 - 是0-9
$str = 'XPMG_ar121023.txt';
preg_match('/('XPMG_')|[0-9\,]))/', $str, $match);
print_r($match);
也许这不是最佳选择:我的角色永远是
答案 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()
无论如何都是最好的)