Вася предоставил соседу Пете доступ к своей домашней Wi-Fi сети и сообщил ему ключ. Хитрый Петя захотел узнать имена всех учётных записей, которыми пользуется Вася на сайтах знакомств. Для перехвата данных он решил использовать специальную программу (сниффер). Петя очень ленив и не хочет проверять все перехваченные данные вручную, поэтому он воспользовался возможностями сниффера по анализу содержимого html-страниц с применением регулярных выражений. Помогите Пете написать регулярное выражение, позволяющее выделить искомый логин.
Код типовой страницы авторизации имеет следующий вид:
$text = '
<html>
<head>
<title>Нашсайтзнакомствлучший</title>
</head>
<body>
<form>
<input type="hidden" name="login"
value="vasyaisthebestofthebest@mail.ru "/>
<input type="text" id="user56789" name="login"
value="vasyaisthebestofthebest@mail.ru" class="loginstring"/>
<input type="hidden" name="password" value="bestman12"/>
<input type="password" name="password" class="passwordstring"/>
<input type="submit" name="action" value="Войти на сайт!" />
</form>
</body>
</html>';
Комментарий
Регулярные выражения предоставляют возможности для описания подстрок определенного вида.Для формирования регулярного выражения используются следующие элементы:
1. символ – например, «а»
2. любой символ – обозначается «.»
3. пробельный символ – обозначается «\s»
4. диапазон символов – обозначается «[]».Например:
[abc] – любая из букв a, b, c
[a-z0-9] – любая из малых букв латинского алфавита и цифра
5. отрицание диапазона:
[^a-z5] – не маленькая буква латинского алфавита и цифра 5
Для указания количества вхождений используются кванторы:
«?» означает «0 или 1 шт.»
«+» означает «>= 1 шт.» , причем берется как можно большее количество символов
«+?» означает «>= 1 шт.» , причем берется как можно меньшее количество символов
«*» означает «>= 0 шт.», причем берется как можно большее количество символов
«*?» означает «>= 0 шт.», причем берется как можно меньшее количество символов
«{5}» означает «5 шт.»
«{5, 8}» означает «от 5 до 8 шт.»
Например, «a*» – любое количество идущих подряд символов «a».
Для извлечения подстроки используются круглые скобки, например, выражение: ([0-9]+)\s+([0-9]+) сохраняет из строки «мои числа 45 567 234 56» числа: «45» и «567».
В состав строки, содержащей логин, входят открывающийся тэг <input, атрибуты typeс опцией hidden и name c опцией login. Эти атрибуты соединены одним или несколькими пробельными символами. Таким образом, регулярное выражение должно начинаться следующим образом:
Далее в атрибуте value храниться логин, который записан в кавычках. Логин может содержать любые символы, кроме кавычек, а значит, выражение, позволяющее его получить, выглядит следующим образом: value="([^"]*)".
Соединяя результаты, полученные в первом и втором параграфах, при помощи любого количества пробельных символом, получаем искомое выражение: