如何解决正则表达式模式匹配
| 关于正则表达式,我是一个完整的新手,我需要一种匹配以下模式的方法:0hv05d_1a8198c8c430c2333fd6e49863f59f60_d41d8cd98f00b204e9800998ecf8427e_3600_3_25
解释:
有6个部分由下划线分隔。第一部分始终为6个[a-zA-Z0-9]字符。第二部分和第三部分是MD5哈希,因此它们始终始终为32个[a-zA-Z0-9]字符。最后3个部分只能是数字。
我正在使用PHP preg_match执行此操作。
提前致谢。
解决方法
您可以尝试:
<?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 );
}
?>
,根据您(有些不完整)的规范,这是我能做到的最短的方法:
preg_match(\'/[a-z\\d]{6}(?:_[a-f\\d]{32}){2}(?:_\\d+){3}/i\',$string);
这将恰好匹配字母或数字的六个实例;后跟一个下划线和32个十六进制数字两次;后跟一个下划线和任意数字3次。最后的/i
使其不区分大小写。
,$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\',$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\";
}
笔记:
md5只是[a-f0-9],而不是[a-z0-9]。
我将/ i设为不区分大小写的匹配项,
而不是在其中指定[a-zA-Z]
每个部分。
,编辑-要更完整,您可以执行以下操作:
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],并包含不区分大小写的“ 3”。
如果您真的想要该表达式,也可以将其重写为:
/[a-z0-9]{6}(?:_[a-f0-9]{32}){2}(?:_\\d+){3}/i
,[a-zA-Z0-9]{6}_[a-f0-9]{32}_[a-f0-9]{32}_[0-9]+_[0-9]+_[0-9]+
参考:http://www.php.net/manual/zh/reference.pcre.pattern.syntax.php
另外,由于php使用PCRE(与珍珠兼容的正则表达式),因此您可以使用以下漂亮的备忘单:http://www.addedbytes.com/cheat-sheets/regular-expressions-cheat-sheet/
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。