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


How to get text after string using reg expression in PHP?

我有以下字符串:

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

我尝试获得文本333,如:

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

但是行不通

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

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

请使用此正则表达式,

/<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

下面是的实时演示

你可以尝试这样做:

<?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)

您应该避免使用regex解析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);