【问题标题】:Breaking a given HTML code using Reg Exp使用正则表达式破坏给定的 HTML 代码
【发布时间】:2012-01-17 16:27:59
【问题描述】:

谁能帮我解决一个快速的正则表达式问题?

我有以下 HTML:

555 Some Street Name<BR />
New Providence VA 22901-1311<BR />
United States<BR />

第一行总是街道

第二行是 City(可以有空格)空格 State Abbv。空格 Zip 连字符 4 位 zip

第三行是国家/地区。

我需要将 HTML 分解为一个变量。谁能提供一个快速的正则表达式?

编辑:也许我不清楚。我需要以下内容: 街道地址、城市、州、邮编、4 位数邮编、国家/地区作为单个变量。

【问题讨论】:

  • 是在不同的行吗?然后你可以去掉标签并拿走它。
  • 在这种情况下,“Zip”和“4Digit Zip”是什么?一个例子会很好。 (我来自德国,不习惯这种格式)。
  • 要构造一个正则表达式,另请参阅open source regexbuddy 和online regex testing 以获得一些有用的工具,或regexp.info 以获得更好的教程。
  • 本例中的 $zip 为 22901,4 位 zip 为 $fourZip = 1311

标签: php regex


【解决方案1】:

这甚至不需要正则表达式。您可以使用explode("&lt;BR /&gt;",...) 拆分不同的行。第一行是街道,最后一行是国家。中间行可以使用substr()分割,因为你知道最后4个字符是4位数的ZIP,它们前面的6个字符是ZIP后跟一个连字符,它们前面的3个字符是状态后跟一个空格.所以段的字符数(从行尾算起)是恒定的。

【讨论】:

  • 我喜欢这个。如果我必须在 100,000 行数据上运行相同的东西,那么 substr 还会比 preg_match 更好吗?
  • 绝对是。我现在没有数字,但是 substr 应该比 preg_match 运行得快很多
【解决方案2】:
555 Some Street Name<BR />
New Providence VA 22901-1311<BR />
United States<BR />

好的,对于第一部分,让我们拆分行

$array = explode('<BR />', $address);

现在您还需要从第二行获取要解析的信息...

$array[1] = New Providence VA 22901-1311;

$tmp = explode(' ', $array[1]);

您现在需要的只是将所有内容设置为正确的变量名

$fullZip = array_pop($tmp);
$zipArray = explode('-',$fullZip);
$zip = $zipArray[0];
$Digitzip = $zipArray[1];
$state = array_pop($tmp);
$providence = implode($tmp);
$country = $array[2];
$street = $array[0];

【讨论】:

    【解决方案3】:
    $array = explode('<BR />', $address);
    

    这是最简单的方法,只需用&lt;br /&gt;-tags 分割字符串。如果您可以避免使用正则表达式,那么您应该这样做,因为它们的性能不如explode 之类的简单字符串操作。

    【讨论】:

    • 也许我不清楚。我需要以下信息:街道地址、城市、州、邮编、4 位数邮编、国家/地区作为单个变量。
    • 您只需要使用 $array[1],因为 [0] 和 [2] 已经包含您想要的内容。您可以将strpos 与substr 结合使用,并用“VA”字符串分割这部分。
    【解决方案4】:

    不需要正则表达式。

    $htmlStr = '555 Some Street Name<BR />New Providence VA 22901-1311<BR />United States<BR />';
    

    Live example

    但请注意,对于更复杂的 HTML 解析,regexes are not the tool for the job。

    【讨论】:

    • 错误的编程语言! ;-)
    • @Armin 哎呀,我现在感觉很傻,我已经习惯回答 JS 问题了哈哈。编辑答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-31
    • 1970-01-01
    • 2021-07-16
    • 2012-05-02
    • 1970-01-01
    • 2013-04-12
    • 1970-01-01
    相关资源
    最近更新 更多