Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 检查包含多个单词和数字的字符串_Php_Regex - Fatal编程技术网

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

Php 检查包含多个单词和数字的字符串,php,regex,Php,Regex,我有一个php文件,可以根据用户单击的链接将用户重定向到正确的用户手册。 因为我们有很多手册(有些是以前的版本,我们需要与最新版本相匹配),我不得不使用正则表达式来找到我想要的 让我们以水果为例。在商店里,我们有手动名称,可以这样看: $manuals = [ 'dc-cn-13apple-frv4-5.pdf', 'dc-cn-33_banana-strawberryv10-108.pdf', 'dc-cn-32peachenv10-125.pdf', 'dc-

我有一个php文件,可以根据用户单击的链接将用户重定向到正确的用户手册。 因为我们有很多手册(有些是以前的版本,我们需要与最新版本相匹配),我不得不使用正则表达式来找到我想要的

让我们以水果为例。在商店里,我们有手动名称,可以这样看:

$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位数字(就像水果的参考号)

它接着用一些词来描述水果,紧接着是两个字母,表示知道手册是哪种语言,以及一个“v08”或“v10”表示知道版本。有时,版本中的这两个字母和数字带有破折号(如“-frv4”)

最后,它们总是以随机的3位数字结尾(由我们使用的CMS自动给出),后跟“.pdf”

我试图像这样操纵我的数组:

foreach ($manuals as $manual) {
    if(preg_match('/^[0-9][0-9][\.]pdf$/', $manual)) {
        echo 'OK';
    }
}
但到目前为止,我的正则表达式与任何东西都不匹配,我真的觉得我不知道自己在做什么

能够检查第一个数字('dc-cn-32'、'dc-cn-13')、单词末尾的两个字母('-frv4'、'peachenv10'或'melonitv09-130.pdf')以及最后三个数字('melonitv09-130.pdf'),这对我真的很有帮助


然后,我将
preg_分割它并开始比较。

您的示例不一定与您的描述匹配,但是根据描述,这个正则表达式应该可以工作(尽管没有经过测试):

说明:

  • ^dc cn-
    与字符串开头的前缀匹配
  • 后跟
    \d{2}
    -两位数
  • 后跟
    [a-zA-Z\-]
    -由1个或多个字母、连字符或下划线组成的字符串(来自您的示例)
  • 后跟
    -?
    -可能存在或不存在的破折号
  • 后跟
    \w{2}
    -两个字母的语言代码
  • 后跟字母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$

为什么香蕉草莓系列没有语言代码?为什么第一行只有一位数字?请以更简单的方式解释。语言代码是可选的,这使得很难找到通用的解决方案。请看,
ry
被识别为语言代码。Sweeper,我自己也不知道。com去年,番禺有很多不同的员工,他们每个人都有自己的手册命名方式。我目前正试图说服他们让我将这些名称更改为标准格式。用一种更简单的方式,我需要预先拆分这些字符串,以便比较他们的一些数字。是的,确实如此!非常感谢。如果我正确地阅读它,我应该特别注意的字符是'd{2}、'w{2}和\d{3}。
^dc-cn-\d{2}[a-zA-Z\]+-?\w{2}v\d+-\d{3}。pdf$
dc-cn-13apple-frv4-5.pdf
@WiktorStribiżew在结尾处匹配1到3个数字。@HadrinePatricola如果这个答案解决了您的问题,请接受它
^dc-cn-\d{2}[a-zA-Z_\-]+-?\w{2}v\d+-\d{1,3}\.pdf$