регулярные выражения для анализатора URL-адресов
<?php
$string = 'user34567';
if(preg_match('/user(^[0-9]{1,8}+$)/', $string)){
echo 1;
}
?>
Я хочу проверить, есть ли в строке слово пользователь, за которым следует число, которое может быть не более 8 символов.
5 answers
На самом деле вы очень близки:
if(preg_match('/^user[0-9]{1,8}$/', $string)){
Привязка для "должно совпадать в начале строки" должна быть полностью впереди, за ней следует литерал "пользователь"; затем вы указываете набор символов [0-9]
и множитель {1,8}
. Наконец, вы заканчиваете с привязкой "должно совпадать в конце строки".
Несколько комментариев к вашему первоначальному выражению:
-
^
соответствует началу строки, поэтому запись его в любом другом месте внутри этого выражения, кроме начала, не будет приведите к ожидаемым результатам -
+
- множитель;{1,8}
тоже один, но после выражения можно использовать только один множитель
- Если вы не собираетесь использовать числа, найденные в выражении, вам не нужны круглые скобки.
Кстати, вместо [0-9]
вы также можете использовать \d
. Это автоматическая группа символов, которая сокращает регулярное выражение, хотя это конкретное выражение не сохраняет слишком много символов;-)
Используя ^
и $
, вы сопоставляете только тогда, когда шаблон является единственной вещью на линии. Это то, чего ты хочешь? Если это так, используйте следующее:
preg_match( '/^user[0-9]{1,8}[^0-9]$/' , $string );
Если вы хотите найти этот шаблон в любом месте строки, я бы попробовал:
preg_match( '/user[0-9]{1,8}[^0-9]/' , $string );
Как всегда, вы должны использовать справочный инструмент, такой как RegexPal, для изолированного тестирования регулярных выражений.
Вы были близки, вот ваше регулярное выражение : /^user[0-9]{1,8}$/
Вместо этого попробуйте следующее регулярное выражение:
/^user([0-9]{1,8})$/
Используйте это регулярное выражение:
/^user\d{1,8}$/