#php #regex #preg-match
#php #регулярное выражение #preg-match
Вопрос:
Это домашнее задание и мой первый опыт использования регулярных выражений. Я начинаю понимать используемый синтаксис и символы и могу выполнить некоторые простые сопоставления с шаблонами / манипуляции, но не могу предвидеть, как достичь некоторых целей этого задания.
Мне был предоставлен текстовый файл, который отформатирован следующим образом:
Steve Blenheim:238-923-7366:95 Latham Lane, Easton, PA 83755:11/12/56:20300
Betty Boop:245-836-8357:635 Cutesy Lane, Hollywood, CA 91464:6/23/23:14500
Igor Chevsky:385-375-8395:3567 Populus Place, Caldwell, NJ 23875:6/18/68:23400
Norma Corder:397-857-2735:74 Pine Street, Dearborn, MI 23874:3/28/45:245700
Существует около 50 строк имен и соответствующей информации, каждая запись находится на новой строке, и каждое «поле» разделено двоеточием. В основном мне нужно найти конкретные вещи из файла и распечатать их на веб-странице, но я не совсем понимаю.
Вот одна проблема, которую я решил:
$myFile = "datebook.txt";
$data = file($myFile);//I have used this to place all data in an array, but it may be necessary to place the data into a string?
//1) Print all lines containing the pattern Street (case insensitive).
$pattern = "/street/i";
$linesFound = preg_grep($pattern, $data);
echo "<pre>", print_r($linesFound, true), "</pre>";
Вот некоторые, которых у меня нет, и конкретные вопросы, касающиеся их:
2) Выведите имя и фамилию, в которых первое имя начинается с буквы ‘B’.
Как мне искать только имена, а не фамилии, названия городов и т.д.?
Как мне напечатать полное имя и только полное имя?
5) Выведите имя и адрес Лори Гортц.
Я понимаю, как найти шаблон ‘Lori Gortz’, но как мне также вернуть ее адрес?
11) Выведите строки, которые заканчиваются ровно пятью цифрами.
12) Распечатайте файл с именем и фамилией в обратном порядке.
14) Дайте каждому повышение на 250,00 долларов.
Не знаю, как сделать что-либо из этого. Я предполагаю, что последнее число для каждой записи — это их зарплата.
Любая помощь приветствуется. Пожалуйста, ответьте также с объяснением кода, спасибо.
Комментарии:
1. Если вы еще не используете что-то подобное, загляните на такой сайт, как regexpal.com для тестирования без необходимости запускать ваш код кучей..
2. @mike Это будет очень полезно, спасибо. Все еще не уверен, с чего начать.
Ответ №1:
Проверьте краткую ссылку на регулярные выражения, я думаю, вы разберетесь с большинством своих задач там. Например, адрес Лори будет строкой после числа после второго двоеточия и перед второй запятой (в ее строке, конечно).
Лучший способ выполнить всю задачу — это просмотреть каждую строку и создать массив со всеми элементами. Таким образом, вы могли бы легко заменить имена, увеличить зарплаты, проверить, заканчивается ли оно 5 цифрами и т.д.
Вы также можете попробовать этот онлайн-тестер. Удачи.
Редактировать: небольшая помощь для начала:
^[A-z ]* this gets full names
^[A-z]* this gets first names
etc...
Правка2:
Посмотрите, что делает этот код:
$line = "Betty Boop:245-836-8357:635 Cutesy Lane, Hollywood, CA 91464:6/23/23:14500";
$regex = "/s|:/";
$result = preg_split($regex, $line);
🙂
Комментарии:
1. Это домашнее задание в значительной степени выполнено, но вы должны были сделать это самостоятельно — лучший способ чему-то научиться — методом проб и ошибок.
Ответ №2:
Я не хочу выполнять их все, но вот несколько советов.. Для вопроса 2:
^[A-Z]* B.*$
^
в основном означает новую строку.[A-Z]*
означает любое количество символов от А до Я- Затем мы сопоставляем пробел
- Затем мы сопоставляем B
.*
означает любое количество других символов.- Наконец, мы сопоставляем с концом строки, используя
$
Это определенно можно улучшить и сделать более гибким, но я позволю вам это сделать..
Комментарии:
1. Идеально, именно то, что я искал. Это должно заставить меня двигаться дальше.
2. Конечно: выбирает начало строки, букву «B», ноль или более букв или цифр, один пробел, ноль или более букв или цифр. (больше нет совпадений, разрывы в двоеточии)
3. @Shomz — Не могли бы вы объяснить, как на самом деле отображать совпадения, не отображая также структуру массива?
4. Ах да, извините, я думал, вы хотите фамилию, начинающуюся с B. Надеюсь, мой ответ был полезен в любом случае.