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

我有一个 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全部并开始比较。


莫回无
浏览 146回答 1
1回答

慕田峪9158850

您的示例不一定与您的描述相符,但根据描述,此正则表达式应该可以工作(但未经过测试):^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$
打开App,查看更多内容
随时随地看视频慕课网APP