我正在寻找一个匹配的正则表达式:X_X
其中X总是大于零的数字,并且两个数字之间必须有下划线字符。
感谢。
编辑:我跑的时候
$ pattern =“[1-9] _ [1-9]”;如果( preg_match($ pattern,$ key))返回 TRUE;
我收到警告:
消息:preg_match() [function.preg-match]:未知 修饰符'_'
答案 0 :(得分:5)
以下应该做你想做的事:
preg_match("/[1-9]\d*_[1-9]\d*/", $key)
请注意,这也适用于包含多个数字的数字,如果示例中的X
只是一位数,那么您可以移除\d*
。
答案 1 :(得分:1)
正则表达式字符串由regexp和修饰符(如i,m)组成。由于它们都是单个字符串的一部分,因此它们之间存在强制分隔符 - 单个字符,如管道,斜杠,分号。由于您可以使用任何符号,因此您必须声明要使用的符号。使用regexp字符串的第一个char声明选择。如果是/,那么分隔符将是/。如果是|,那么分隔符将是|。
所以这些完全等价(regexp'test',修饰符'i'):
preg_match("/test/i");
preg_match("|test|i");
preg_match(":test:i");
如果您之前使用分隔符,PHP会将下一个字符解释为修饰符。这就是你发生的事情(因为你开始以[,PHP解释]作为分隔符而_作为修饰符)。
您正在寻找的模式是:
$pattern = '/^\d+_\d+$/';
注意^和$!省略这些(正如大多数其他答案所做的那样)是一个巨大的错误(因为它允许匹配部分之前和之后的任何字符串;如果你忘记了^,-20_1也会匹配,因为它有一个有效的子字符串:20_1)。
答案 2 :(得分:0)
您可以使用[1-9]定义匹配1-9之间所有数字的字符类。
$pattern = "[1-9]_[1-9]";
答案 3 :(得分:0)
试试这个
$pattern = "/[1-9]_[1-9]/";