【问题标题】:regular expressions for url parserurl解析器的正则表达式
【发布时间】:2012-06-15 12:24:42
【问题描述】:
<?php

    $string = 'user34567';

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

?>

我想检查字符串是否有单词 user 后跟数字,最多可以是 8 个符号。

【问题讨论】:

    标签: php regex preg-match regular-language


    【解决方案1】:

    实际上你很接近:

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

    “must match at start of string”的锚点应该一直在前面,然后是“user”字面量;然后指定字符集[0-9] 和乘数{1,8}。最后,以“必须在字符串结尾匹配”锚点结束。

    对你原来的表达的几个cmet:

    1. ^ 匹配字符串的开头,因此将其写入此表达式中的任何其他位置,但开头不会产生预期的结果
    2. + 是一个乘数; {1,8} 也是一个,但表达式后只能使用一个乘数
    3. 除非您打算使用在表达式中找到的数字,否则不需要括号。

    顺便说一句,您也可以使用\d 代替[0-9]。它是一个自动字符组,可以缩短正则表达式,尽管这个特定的字符组不会保存太多字符 ;-)

    【讨论】:

      【解决方案2】:

      通过使用^ 和$,只有当模式是行中唯一的东西时,您才会匹配。那是你要的吗?如果是这样,请使用以下内容:

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

      如果您想在一行中的任何位置找到此模式,我会尝试:

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

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

      【讨论】:

        【解决方案3】:

        使用这个正则表达式:

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

        【讨论】:

          【解决方案4】:

          尝试以下正则表达式:

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

          【讨论】:

            【解决方案5】:

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

            【讨论】:

              猜你喜欢
              • 2011-03-20
              • 1970-01-01
              • 2012-08-23
              • 1970-01-01
              • 2012-11-21
              • 1970-01-01
              • 2012-10-17
              相关资源
              最近更新 更多