正则表达式条件


regex Conditions

我有一个正则表达式,如下所示。

'#^(VK[1-8][0-9A-Z]+)#i'

这很好,如果字符串以 VK[1-8][0-9A-Z] 开头,例如 VK2TEST,这将返回 true。但是,如果在 [0-9A-Z] 之后,可能存在/和更多字符,其中一些我需要返回 true,其中一些我需要返回 false,该怎么办?例如VK2TEST/P。

如果我需要返回,比如说,VK2TEST/P 和 VK2TEST/M 为真,但其他字母数字字符继续将/作为假,我该怎么做?这可能吗?例如。。。

VK2TEST = true
VK2TEST/P = true
VK2TEST/P1 = false
VK2TEST/M = true
VK2TEST/MM = false
VK2TEST/QRP = true

我的研究指出了条件子模式,但我真的不知道我是否朝着正确的方向前进。

对于以下结果:

VK2TEST = true
VK2TEST/P = true
VK2TEST/P1 = false
VK2TEST/M = true
VK2TEST/MM = false
VK2TEST/QRP = true

您可以使用如下所示的正则表达式:

'#^(VK[1-8][0-9A-Z]+('/(M|P|QRP))?)$#i'

此语法在 PHP PCRE 元字符语法页面中介绍。

以下是一些提示:

  • '':转义字符
  • []:类定义
  • +:一个或多个量词
  • ?:零个或一个量词
  • (): 子模式
  • |:替代分支的开始
  • $:主题结束

一些注意事项:

  • 如果你想要一个或多个类,+应该在类之外,例如 [1-8]+包括11。如果需要 [1-8] 或+,请使用 [1-8+] 。此外,在您的示例中,[A-Z+]将匹配T而不是额外的EST字符。为了匹配单词 TEST,您可以使用类定义之外的+ [A-Z]+
  • 斜杠,/,需要转义,因此'/
  • 如果要匹配不同的子字符串,则应使用包含在()中的子模式,同时使用|分支管道分隔模式。