我有一个 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'或'瓜它v09-130.pdf'),以及最后3位数字( 'melonitv09- 130 .PDF')。然后我会preg_split全部并开始比较。
1 回答
慕田峪9158850
TA贡献1794条经验 获得超7个赞
您的示例不一定与您的描述相符,但根据描述,此正则表达式应该可以工作(但未经过测试):
^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$
- 1 回答
- 0 关注
- 145 浏览
添加回答
举报
0/150
提交
取消