Соответствие шаблону PHP RegEx - вопросы для начинающих, чтобы начать - PullRequest
1 голос
/ 07 ноября 2011

Это домашнее задание и мой первый опыт использования RegEx. Я начинаю понимать используемый синтаксис и символы и могу выполнить несколько простых сопоставлений / манипуляций с образцами, но не могу предвидеть, как достичь некоторых целей этого задания.

Мне дали текстовый файл в следующем формате:

    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 строк имен и соответствующей информации, каждая запись находится на новой строке, а каждое поле отделено двоеточием. В основном мне нужно найти конкретные вещи из файла и распечатать их на веб-странице, но я не совсем понимаю.

Вот одна проблема, которую я решил:

<code>$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), "
";

Вот некоторые из них, которых у меня нет, и конкретные вопросы по ним:

2) Напечатайте имя и фамилию, в которой имя начинается с буквы «B».

Как мне искать только имена, а не фамилии, названия городов и т. Д.?

Как напечатать полное имя и только полное имя?

5) Напечатать имя и адрес Лори Горц.

Я понимаю, как найти шаблон 'Лори Гортц', но как мне вернуть ее адрес?

11) Вывести строки, заканчивающиеся ровно пятью цифрами.

12) Распечатать файл с обратными именами и фамилиями.

14) Раздайте каждому рейз на 250 долларов.

Не знаю, как это сделать. Я предполагаю, что последний номер для каждой записи - их зарплата.

Любая помощь приветствуется. Пожалуйста, ответьте с объяснением кода, спасибо.

Ответы [ 2 ]

1 голос
/ 07 ноября 2011

Я не хочу делать их все, но вот несколько советов ... На вопрос 2:

^[A-Z]* B.*$
  • ^ в основном означает новую строку.
  • [A-Z]* означает любое количество символов от A-Z
  • Далее мы сопоставляем пробел
  • Далее мы сопоставим B
  • .* означает любое количество других символов.
  • Наконец, мы сопоставляем конец строки, используя $

Это определенно можно улучшить и сделать более гибким, но я позволю вам сделать это ..

1 голос
/ 07 ноября 2011

Проверьте краткий справочник RegEx , я думаю, вы разберетесь там с большинством своих задач. Например, адрес Лори будет строкой после числа после второго двоеточия и перед второй комой (в ее строке, конечно).

Лучший способ выполнить всю задачу - пройти по каждой строке и создать массив со всеми элементами. Таким образом, вы можете легко заменить имена, увеличить зарплату, проверить, заканчивается ли оно 5 цифрами и т. Д.

Вы также можете попробовать этот онлайн-тестер . Удачи.

Edit: Маленькая помощь для начала:

^[A-z ]*   this gets full names
^[A-z]*    this gets first names
etc...

Edit2: Посмотрите, что делает этот код:

$line = "Betty Boop:245-836-8357:635 Cutesy Lane, Hollywood, CA 91464:6/23/23:14500";
$regex = "/\s|:/";
$result = preg_split($regex, $line);

:)

...