我有一个php文件,该文件将用户重定向到正确的用户手册,具体取决于他单击的链接。 由于我们有很多手册(有些是以前的版本,我们需要与最新版本匹配),所以我不得不使用REGEX来查找所需的内容。
让我们以水果为例。在商店中,我们有一些手动名称,如下所示:
$manuals = [
'dc-cn-13apple-frv4-5.pdf',
'dc-cn-33_banana-strawberryv10-108.pdf',
'dc-cn-32peachenv10-125.pdf',
'dc-cn-23lemoncoconutwatermelonitv09-130.pdf'
];
所以有很多可能的组合,重要的是它们总是以'dc-cn-'开头,然后是对我们很重要的2位数字(就像水果的参考文献一样。)
接着用一些单词来描述水果,紧接着是2个字母以使用本手册所用的语言来知道水果,并以'v08'或'v10'来知道版本。有时版本的那两个字母和数字带有破折号(例如'-frv4')。
最后,它们总是以随机的3位数字结尾(由我们使用的CMS自动给出),后跟“ .pdf”。
我试图像这样操纵数组:
foreach ($manuals as $manual) {
if(preg_match('/^[0-9][0-9][\.]pdf$/', $manual)) {
echo 'OK';
}
}
但是到目前为止,我的REGEX仍然不匹配,我真的感觉自己对自己的工作一无所知。
能够检查第一个数字('dc-cn- 32 ','dc-cn- 13 ')和2单词末尾的字母(“- fr v4”,“ peach en v10”或“ melon it v09-130.pdf” )和最后3位数字(“ melonitv09- 130 .pdf”)。
然后我将全部preg_split
并开始进行比较。
答案 0 :(得分:1)
您的示例不一定符合您的描述,但是根据描述,此正则表达式应该有效(不过未经测试):
^dc-cn-\d{2}[a-zA-Z_\-]+-?\w{2}v\d+-\d{3}\.pdf$
说明:
^dc-cn-
从字符串开头匹配您的前缀\d{2}
-一个两位数的数字[a-zA-Z_\-]
-由1个或多个字母,连字符或下划线组成的字符串(来自您的示例)-?
-可能存在或可能不存在的破折号\w{2}
-两个字母的语言代码v\d+
-字母 v 和数字-\d{3}
-3位数的CMS号码\.pdf$
-字面意思是字符串末尾的 .pdf 更新:如果最后一个CMS号并不总是3位数字,而是1或2位数字(例如,如上述示例中的一个,则正则表达式将变为
^dc-cn-\d{2}[a-zA-Z_\-]+-?\w{2}v\d+-\d{1,3}\.pdf$