我有一个正则表达式,如下所示。
'#^(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]+
。 - 斜杠,
/
,需要转义,因此'/
。 - 如果要匹配不同的子字符串,则应使用包含在
()
中的子模式,同时使用|
分支管道分隔模式。