如何在PHP中使用reg表达式获取字符串后的文本?

时间:2016-09-17 15:18:38

标签: php regex

我有以下字符串:

<p><b>Born:</b>333<br></p>

我尝试将文字333视为:

<b>Born:<\/b>(.)*<br>

但它不起作用

4 个答案:

答案 0 :(得分:1)

改为使用此正则表达式

/<b>Born:<\/b>(.*?)<br>/

这是一个例子,

$reg = "/<b>Born:<\/b>(.*?)<br>/";
$str = "<p><b>Born:</b>333<br></p>";
$matches = array();
preg_match($reg, $str, $matches);
echo $matches[1];  // 333

这是live demo

答案 1 :(得分:1)

.是字符串中的任何字符,*表示我们关注重复。括号决定了要输出的组。

您已使用(.)*公式,这意味着您只会获得最后一个字符(帖子中的正则表达式应输出3)。如果要输出整个表达式333,请尝试使用(.*?)将所有内容放在一个组中。

答案 2 :(得分:0)

您可以尝试这样的事情:

<?php 
    $string     = "<p><b>Born:</b>333<br></p>";
    $extract    = preg_replace("#(<p>.*?<\/b>)(.*?)(<br.+>)#", "$2", $string);

    var_dump($extract); //<== DISPLAYS::: string '333' (length=3)

答案 3 :(得分:0)

你应该避免用正则表达式解析html,因为它是一个不好的做法(html有太多的陷阱,你没有利用html结构,当html没有很好地格式化字符串方法停止工作)。要走的路是使用一个旨在解析html的工具。组合DOMDocument / DOMXPath能够构建DOM树并使用XPath语言进行查询:

$str = "<p><b>Born:</b> 333<br></p>";

libxml_use_internal_errors(true);

$xp = new DOMXPath(DOMDocument::loadHTML($str));
$result = $xp->evaluate('string(//b[.="Born:"]/following-sibling::text()[1])');

libxml_clear_errors();

echo trim($result);