我有以下字符串:
<p><b>Born:</b>333<br></p>
我尝试将文字333
视为:
<b>Born:<\/b>(.)*<br>
但它不起作用
答案 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
答案 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);