#php #preg-match
#php #предварительное совпадение
Вопрос:
Когда я попробовал следующий код:
function getusername($input){
//parse the result
preg_match("/<username>(.*)?</username>/", $input, $username);
return $username[1]; // Line 4
}
Это выдало мне эту ошибку:
Неопределенное смещение в строке 4.
Комментарии:
1. Вы уверены, что
$input
соответствует вашему регулярному выражению?2. Было бы полезно, если бы вы добавили $ input, на котором вы запускаете функцию.
3. Просто мысль (я уже поддержал ответ), похоже, вы анализируете XML, так почему бы вместо этого не использовать SimpleXML?
4. @All: Я передавал неправильный XML. Спасибо вам всем.
5. @Tomalakgeret’kal: Я принимаю, что это все же другой вопрос Subbish. Как я упоминал в вопросе, я даже не знаком с PHP и должен был работать с небольшим количеством PHP-кода. Спасибо за ваши комментарии, которые помогли мне и дали мне знать, что это еще один сложный вопрос.
Ответ №1:
Какую ошибку я делаю?
Ну, кажется, $username[1]
этого не существует. Это может произойти, если регулярное выражение не совпадает. Я бы изменил его на:
function getusername($input){
preg_match("/<username>(.*)?</username>/", $input, $username);
if( count( $username ) > 0 ) {
return $username[1];
}
return false;
}
Комментарии:
1. Или даже
if (preg_match("/<username>(.*)?</username>/", $input, $username)) { return $username[1]; } return false;
sincepreg_match
возвращает количество совпадений.2. не должно
count($matches)
бытьcount($username)
?
Ответ №2:
Это означает, что вы пытаетесь получить доступ к ключу в массиве, который не существует. Итак, похоже, что ваша $username
переменная не имеет ключа 1. Помните, что в программировании вы обычно начинаете отсчет с 0, поэтому первым значением будет $username[0]
.
Вы можете визуализировать свою переменную username, вызвав var_dump
, как таковую:
var_dump($username);
Ответ №3:
Возможны различные варианты.
1.) Сайт, к которому вы пытаетесь получить доступ, не допускает ботов или имеет какую-либо функцию безопасности, которая может помешать боту получить доступ к сайту. Чтобы проверить, перенаправляет сайт или нет, выведите / echo переменную, в которой у вас хранятся все данные.
2.) Текстовое выражение записано не в правильном формате, логически неверно, когда оно выдает результат в виде пустого набора.