PHP正则表达式不匹配 - 有什么问题?

时间:2011-11-27 13:09:09

标签: php regex

我有以下正则表达式:

"^[x]{1}[a-z]{3,4}:[a-z0-9]{1,6}"

我想用它来匹配字符串,如:

XABC:Z123

但是,当我使用this regex tester进行尝试时,它与模式不匹配。我的模式是错误的还是在线测试人员不可靠?

如果我的模式不对,有人可能会指出为什么这是错误的。

另外,我想让模式匹配不区分大小写 - 但我不太确定这样做的最佳方式(想要更好地问而不是试错)。如何更改模式以使其匹配,无论情况如何?

2 个答案:

答案 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 是另一个让您选择自己的分隔符的测试人员。