PHP RegEx模式匹配 - 让我入门的初学者问题

时间:2011-11-07 02:03:11

标签: php regex preg-match

这是一项家庭作业,也是我使用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行名称和相应的信息,每个条目都在一个新行上,每个“字段”用冒号分隔。大多数情况下,我需要从文件中找到特定的东西并将它们打印在网页上,但我不太明白。

这是我解决的一个问题:

$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的姓名和地址。

我理解如何找到'Lori Gortz'模式,但我如何返回她的地址呢?

11)打印以五位数字结尾的行。

12)打印文件,反转名字和姓氏。

14)给每个人加价250.00美元。

不知道怎么做这些。我假设每个条目的最后一个数字是他们的工资。

感谢任何帮助。请回复一下代码的解释,谢谢。

2 个答案:

答案 0 :(得分:1)

检查RegEx quick reference,我想你会在那里找出你的大部分任务。例如,Lori的地址将是第二个冒号之后和第二个昏迷之前的数字之后的字符串(当然是在她的行中)。

完成所有任务的最佳方法是遍历每一行并使用所有元素创建一个数组。这样你就可以轻松取代名字,增加工资,检查它是否以5位数结尾等等。

您也可以尝试此online tester。祝你好运。

编辑: 一开始没什么帮助:

^[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);

:)

答案 1 :(得分:1)

我不想做所有这些,但这里有一些提示..问题2:

^[A-Z]* B.*$
  • ^基本上意味着换行。
  • [A-Z]*表示来自A-Z
  • 的任意数量的字符
  • 接下来我们匹配一个空格
  • 接下来我们匹配B
  • .*表示任意数量的其他字符。
  • 最后,我们使用$
  • 匹配行尾

这绝对可以改进并且更灵活,但我会让你这样做..

相关问题