简体   繁体   中英

regular expressions for url parser

<?php

    $string = 'user34567';

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

?>

I want to check if the string have the word user follows by number that can be 8 symbols max.

You're very close actually:

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

The anchor for "must match at start of string" should be all the way in front, followed by the "user" literal; then you specify the character set [0-9] and multiplier {1,8} . Finally, you end off with the "must match at end of string" anchor.

A few comments on your original expression:

  1. The ^ matches the start of a string, so writing it anywhere else inside this expression but the beginning will not yield the expected results
  2. The + is a multiplier; {1,8} is one too, but only one multiplier can be used after an expression
  3. Unless you're intending to use the numbers that you found in the expression, you don't need parentheses.

Btw, instead of [0-9] you could also use \\d . It's an automatic character group that shortens the regular expression, though this particular one doesn't save all too many characters ;-)

By using ^ and $ , you are only matching when the pattern is the only thing on the line. Is that what you want? If so, use the following:

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

If you want to find this pattern anywhere in a line, I would try:

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

As always, you should use a reference tool like RegexPal to do your regular expression testing in isolation.

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

请尝试以下正则表达式:

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

使用这个正则表达式:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM