PHP正则表达式不匹配-怎么了?

PHP正则表达式不匹配-怎么了?,php,regex,Php,Regex,我有以下正则表达式: "^[x]{1}[a-z]{3,4}:[a-z0-9]{1,6}" 我想使用它来匹配字符串,如: xabc:z123 但是,当我尝试使用时,它与模式不匹配。是我的模式错了,还是在线测试仪不可靠 如果我的模式是错误的,有人能指出为什么它是错误的 另外,我想使模式匹配不区分大小写——但我不太确定最好的方法是什么(最好是询问,而不是反复尝试)。如何更改模式使其匹配而不考虑大小写?只需添加一个I即可进行不区分大小写的匹配: /^[x]{1}[a-z]{3,4}:[a-z0-9]

我有以下正则表达式:

"^[x]{1}[a-z]{3,4}:[a-z0-9]{1,6}"
我想使用它来匹配字符串,如:

xabc:z123

但是,当我尝试使用时,它与模式不匹配。是我的模式错了,还是在线测试仪不可靠

如果我的模式是错误的,有人能指出为什么它是错误的


另外,我想使模式匹配不区分大小写——但我不太确定最好的方法是什么(最好是询问,而不是反复尝试)。如何更改模式使其匹配而不考虑大小写?

只需添加一个
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

只需添加一个
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

在测试仪中,您必须输入不带引号的正则表达式。在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

是另一个允许您选择自己的分隔符的测试程序。

在测试程序中,您必须输入不带引号的正则表达式。在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

是另一个让您选择自己的分隔符的测试工具。

在您的测试中使用
^[x]{1}[a-z]{3,4}:[a-z0-9]{1,6}
作为regexp(不带引号)效果很好。不区分大小写的版本。@rebus是的,我想OP想要匹配组(请参阅我的更新答案)。不知道,没有说明任何有关GRUP的问题。请确保您没有在regex tester中包含引号,因为它已经添加了分隔符(我只是假设您现在想使用引号作为分隔符)在你的测试中,
^[x]{1}[a-z]{3,4}:[a-z0-9]{1,6}
作为regexp(不带引号)对我来说效果很好。不区分大小写的版本。@rebus是的,我想OP想要匹配组(请参阅我的更新答案)。不知道,也没有说任何有关GRUP的问题。请确保您没有在regex测试程序中包含引号,因为它已经添加了分隔符(我只是假设您现在想使用引号作为分隔符)。实际上,不想要团体。你能告诉我你在正则表达式测试仪上使用的设置吗?。具体来说,您使用了哪些值来表示“Select Preg Type:”和“Select Function:”?对不起,我刚才看到了您的评论。既然你接受了这个答案,我想它对你有用。无论如何:我只是保留了默认值:)。实际上,我不想要分组。你能告诉我你在正则表达式测试仪上使用的设置吗?。具体来说,您使用了哪些值来表示“Select Preg Type:”和“Select Function:”?对不起,我刚才看到了您的评论。既然你接受了这个答案,我想它对你有用。无论如何:我只是保留了默认值:)。