PHP简单的正则表达式问题

时间:2011-03-19 21:19:43

标签: php regex

我正在寻找一个匹配的正则表达式:X_X

其中X总是大于零的数字,并且两个数字之间必须有下划线字符。

感谢。

编辑:我跑的时候

  

$ pattern =“[1-9] _ [1-9]”;如果(   preg_match($ pattern,$ key))返回   TRUE;

我收到警告:

  

消息:preg_match()   [function.preg-match]:未知   修饰符'_'

4 个答案:

答案 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]/";