为了账号安全,请及时绑定邮箱和手机立即绑定

检查包含多个单词和数字的字符串

检查包含多个单词和数字的字符串

PHP
莫回无 2021-09-05 20:35:22
我有一个 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$


查看完整回答
反对 回复 2021-09-05
  • 1 回答
  • 0 关注
  • 145 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信