【问题标题】:PHP Regexp: ignoring everything before a defined substringPHP Regex:忽略定义的子字符串之前的所有内容
【发布时间】:2011-11-07 04:57:04
【问题描述】:

我正在尝试解析网页。 基本上它被存储在一个字符串中,如下所示:

"[HTML CODE ...]world:[HTML CODE ...]my_number[REST OF HTML_CODE ...]"

当然,“world:”和“MY_NUMBER”是 html 代码的一部分,但是我想忽略第一次出现“world:”之前的所有内容。我需要的是第一次出现“世界:”之后出现的第一个数字,请记住一堆html代码将在它们之间。 我可以对 html 代码进行子串化,但如果可能的话,我想只使用一个正则表达式来完成这一切。

这是我尝试匹配的正则表达式:

'/(?<=world:)\D+?[0-9]+/'

但这会返回“世界:”和我的号码之间的所有 html 内容。

谢谢!

【问题讨论】:

  • 您可以删除之前的所有内容,包括“world:”,然后找到剩余字符串中的第一个数字。
  • 正如我所写的,我可以对 html 代码进行子字符串化,但我只想在可能的情况下使用正则表达式。没有什么特别的原因,我只是想提高我的正则表达式知识

标签: php regex


【解决方案1】:

我想你已经接近了。我可以在你提供的字符串上使用它。

$subject = "[HTML CODE ...]world:[HTML CODE ...]3334[REST OF HTML_CODE ...]";
$pattern = "/world:\D+?(?<my_number>[0-9]+)/";
$matches = array();

$result =  preg_match_all($pattern, $subject, &$matches);

print_r($matches);

结果:

Array
(
    [0] => Array
        (
            [0] => world:[HTML CODE ...]3334
        )

    [my_number] => Array
        (
            [0] => 3334
        )

    [1] => Array
        (
            [0] => 3334
        )

)

【讨论】:

  • 我得到的结果与我的结果相同,它适用于我提供的字符串,它不适用于 html 页面,这确实返回了“世界:”部分,我不想
  • 我已经对其进行了编辑以返回一个名为“my_number”的键,以便于查找值。
猜你喜欢
  • 1970-01-01
  • 2010-12-23
  • 2018-08-08
  • 1970-01-01
  • 1970-01-01
  • 2012-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多