我有一个正则表达式如下。
'#^(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,但我真的不知道自己是否朝着正确的方向前进。
答案 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]+
可以使用类定义之外的+
。/
的斜杠,因此\/
。()
中包含的子模式,同时使用|
分支管道来分隔模式。