对于正则表达式而言,我是一个完整的新手,我需要一种方法来匹配以下模式:
0hv05d_1a8198c8c430c2333fd6e49863f59f60_d41d8cd98f00b204e9800998ecf8427e_3600_3_25
说明:
有6个部分用下划线分隔。第一部分总是6个[a-zA-Z0-9]字符。第二和第三部分是MD5哈希值,因此每个部分始终为32 [a-zA-Z0-9]个字符。最后3个部分只能是数字。
我正在使用PHP preg_match来执行此操作。
提前致谢。
答案 0 :(得分:8)
根据你的(有些不完整的)规范,这是我能做到的最短的时间:
preg_match('/[a-z\d]{6}(?:_[a-f\d]{32}){2}(?:_\d+){3}/i', $string);
这将恰好匹配一个字母或数字的六个实例;后跟一个下划线和32个十六进制数字,两次;后跟一个下划线和任意数字的数字,3次。最后的/i
将其置于不区分大小写的模式中。
答案 1 :(得分:4)
你可以尝试:
<?php
$string = '0hv05d_1a8198c8c430c2333fd6e49863f59f60_d41d8cd98f00b204e9800998ecf8427e_3600_3_25';
if (preg_match('/([a-zA-Z0-9]{6})_([a-fA-F0-9]{32})_([a-fA-F0-9]{32})_([0-9]+)_([0-9]+)_([0-9]+)/',$string,$match)) {
print_r( $match );
}
?>
答案 2 :(得分:3)
$string = "0hv05d_1a8198c8c430c2333fd6e49863f59f60_d41d8cd98f00b204e9800998ecf8427e_3600_3_25";
if (preg_match('/^([a-z0-9]{6})_([a-f0-9]{32})_([a-f0-9]{32})_([0-9]+)_([0-9]+)_([0-9]+)$/i', $string, $matches))
{
echo "Match!<br />\n";
echo "First: ".$matches[1]."<br />\n";
echo "MD5 hashes: ".$matches[2]. " - ".$matches[3]."<br />\n";
echo "numbers: ".$matches[4]. " - ".$matches[5]. " - ".$matches[6]."<br />\n";
}
备注:强>
答案 3 :(得分:1)
编辑 - 为了更完整,你可以这样做:
if (preg_match('/[a-z0-9]{6}_[a-f0-9]{32}_[a-f0-9]{32}_\d+_\d+_\d+/i', $subject)) {
# Successful match
} else {
# Match attempt failed
}
我还要用\ d类更简洁地替换[0-9],将MD5的匹配改为[a-f0-9],我也改变了[a-zA-Z0-9]至[a-z0-9]并包含/i
,用于区分大小写。
如果你真的想表达,也可以改写为:
/[a-z0-9]{6}(?:_[a-f0-9]{32}){2}(?:_\d+){3}/i
答案 4 :(得分:0)
[a-zA-Z0-9]{6}_[a-f0-9]{32}_[a-f0-9]{32}_[0-9]+_[0-9]+_[0-9]+
参考:http://www.php.net/manual/en/reference.pcre.pattern.syntax.php
另外,因为php使用PCRE(珍珠兼容正则表达式),你可以使用这个漂亮的备忘单:http://www.addedbytes.com/cheat-sheets/regular-expressions-cheat-sheet/