url解析器的正则表达式

时间:2012-06-12 15:21:46

标签: php regex preg-match regular-language

<?php

    $string = 'user34567';

            if(preg_match('/user(^[0-9]{1,8}+$)/', $string)){
                echo 1;
            }

?>

我想检查字符串是否包含单词 user ,数字后跟最多8个符号的数字。

5 个答案:

答案 0 :(得分:10)

你实际上非常接近:

if(preg_match('/^user[0-9]{1,8}$/', $string)){

“必须在字符串开头匹配”的锚点应该一直在前面,然后是“user”文字;然后指定字符集[0-9]和乘数{1,8}。最后,你以“必须在字符串末尾匹配”锚点结束。

对原始表达的一些评论:

  1. ^匹配字符串的开头,因此将其写入此表达式中的任何其他位置,但开头不会产生预期的结果
  2. +是乘数; {1,8}也是一个,但在表达式
  3. 之后只能使用一个乘数
  4. 除非您打算使用在表达式中找到的数字,否则不需要括号。
  5. 顺便说一句,您也可以使用[0-9]代替\d。它是一个缩短正则表达式的自动字符组,尽管这个特殊的字符组不会保存所有太多的字符; - )

答案 1 :(得分:3)

通过使用^$,您只能在模式是该行上的唯一内容时进行匹配。那是你要的吗?如果是这样,请使用以下内容:

preg_match( '/^user[0-9]{1,8}[^0-9]$/' , $string );

如果你想在一行中找到这个模式,我会尝试:

preg_match( '/user[0-9]{1,8}[^0-9]/' , $string );

与往常一样,您应该使用像RegexPal这样的参考工具来单独进行正则表达式测试。

答案 2 :(得分:2)

你很接近,这是你的正则表达式:/^user[0-9]{1,8}$/

答案 3 :(得分:1)

尝试使用以下正则表达式:

/^user([0-9]{1,8})$/

答案 4 :(得分:1)

使用此正则表达式:

/^user\d{1,8}$/