Сопоставление шаблонов регулярных выражений PHP — вопросы для начинающих, чтобы я начал

#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. Надеюсь, мой ответ был полезен в любом случае.