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:”?对不起,我刚才看到了您的评论。既然你接受了这个答案,我想它对你有用。无论如何:我只是保留了默认值:)。