正则表达式

时间:2015-06-12 16:09:43

标签: php regex

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

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

这很好,如果字符串以VK [1-8] [0-9A-Z]开头,则返回true,例如VK2TEST。但是,如果在[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

我的研究指出conditional subpatterns,但我真的不知道自己是否朝着正确的方向前进。

1 个答案:

答案 0 :(得分:4)

以下结果:

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 Meta-Character Syntax page.

中介绍了此语法

以下是一些提示:

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

一些注意事项:

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