我有以下正则表达式:
"^[x]{1}[a-z]{3,4}:[a-z0-9]{1,6}"
我想用它来匹配字符串,如:
XABC:Z123
但是,当我使用this regex tester进行尝试时,它与模式不匹配。我的模式是错误的还是在线测试人员不可靠?
如果我的模式不对,有人可能会指出为什么这是错误的。
另外,我想让模式匹配不区分大小写 - 但我不太确定这样做的最佳方式(想要更好地问而不是试错)。如何更改模式以使其匹配,无论情况如何?
答案 0 :(得分:4)
只需添加i
以进行不区分大小写的匹配:
/^[x]{1}[a-z]{3,4}:[a-z0-9]{1,6}/i
顺便说一句,你的正则表达式有效!?
输出:
Array
(
[0] => xabc:z123
)
如果你想要这样的话:
Array
(
[0] => 'xabc:z123',
[1] => 'x',
[2] => 'abc'
...
)
您需要使用()
添加群组,例如:
/^([x]{1})([a-z]{3,4}):([a-z0-9]{1,6})/i
答案 1 :(得分:2)
在测试仪中,您必须输入正则表达式而不包含周围的引号。在PHP源代码中,您必须使用引号和一个正则表达式分隔符;测试人员在其生成的代码中显示:
$ptn = "/^[x]{1}[a-z]{3,4}:[a-z0-9]{1,6}/";
要使其不区分大小写,您有两种选择。一种是在结束分隔符后添加i
,正如@ middus的答案所示。另一种是将(?i)
添加到正则表达式本身:
(?i)^[x]{1}[a-z]{3,4}:[a-z0-9]{1,6}
测试人员会接受它;如果你自己没有添加分隔符,它会向任一端添加/
,这意味着你的正则表达式中的任何斜杠都需要被转义(即,它不会为你逃避它们)。请注意,PHP允许您使用其他字符作为分隔符,但该测试人员只能识别/
。
进一步说明:
要匹配单个x
,您只需要x
。当它们里面只有一个字母时,方括号是不必要的,{1}
量词从来没有任何影响 - 它是纯粹的混乱。
如果您正在使用正则表达式验证字符串,则可能需要在末尾添加$
锚点。
最终结果:
/^x[a-z]{3,4}:[a-z0-9]{1,6}$/i
Here 是另一个让您选择自己的分隔符的测试人员。