用于URL解析器的正则表达式

5
<?php

    $string = 'user34567';

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

?>

我想检查字符串中是否有单词user后跟最多8个数字的内容。
5个回答

10

实际上,你非常接近了:

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

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

关于你原来的表达式,有几点需要注意:

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

顺便说一句,[0-9]可以替换为\d。这是一个自动字符组,可以缩短正则表达式,尽管这个特定的字符组并没有节省太多字符 ;-)


3
通过使用 ^$,你只匹配模式是行上唯一的内容。这是你想要的吗?如果是,请使用以下内容:
preg_match( '/^user[0-9]{1,8}[^0-9]$/' , $string );

如果您想在一行中找到此模式,可以尝试以下方法:
preg_match( '/user[0-9]{1,8}[^0-9]/' , $string );

像往常一样,你应该使用类似RegexPal这样的参考工具,在隔离环境中进行正则表达式测试。


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

1

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

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


1
请使用这个正则表达式:
/^user\d{1,8}$/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接