регулярные выражения для анализатора URL-адресов


<?php

    $string = 'user34567';

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

?>

Я хочу проверить, есть ли в строке слово пользователь, за которым следует число, которое может быть не более 8 символов.

Author: Marian Petrov, 2012-06-12

5 answers

На самом деле вы очень близки:

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

Привязка для "должно совпадать в начале строки" должна быть полностью впереди, за ней следует литерал "пользователь"; затем вы указываете набор символов [0-9] и множитель {1,8}. Наконец, вы заканчиваете с привязкой "должно совпадать в конце строки".

Несколько комментариев к вашему первоначальному выражению:

  1. ^ соответствует началу строки, поэтому запись его в любом другом месте внутри этого выражения, кроме начала, не будет приведите к ожидаемым результатам
  2. + - множитель; {1,8} тоже один, но после выражения
  3. можно использовать только один множитель
  4. Если вы не собираетесь использовать числа, найденные в выражении, вам не нужны круглые скобки.

Кстати, вместо [0-9] вы также можете использовать \d. Это автоматическая группа символов, которая сокращает регулярное выражение, хотя это конкретное выражение не сохраняет слишком много символов;-)

 10
Author: Ja͢ck, 2012-06-12 15:38:33

Используя ^ и $, вы сопоставляете только тогда, когда шаблон является единственной вещью на линии. Это то, чего ты хочешь? Если это так, используйте следующее:

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

Если вы хотите найти этот шаблон в любом месте строки, я бы попробовал:

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

Как всегда, вы должны использовать справочный инструмент, такой как RegexPal, для изолированного тестирования регулярных выражений.

 3
Author: Andrew Kozak, 2012-06-12 15:28:44

Вы были близки, вот ваше регулярное выражение : /^user[0-9]{1,8}$/

 2
Author: zessx, 2012-06-12 15:23:53

Вместо этого попробуйте следующее регулярное выражение:

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

 1
Author: julesj, 2012-06-12 15:23:57

Используйте это регулярное выражение:

/^user\d{1,8}$/
 1
Author: anubhava, 2012-06-12 15:23:58