Php 使用正则表达式获取HTML标记的内部文本
捕获此数据时遇到问题:Php 使用正则表达式获取HTML标记的内部文本,php,regex,Php,Regex,捕获此数据时遇到问题: <tr> <td><span class="bodytext"><b>Contact:</b><b></b></span><span style='font-size:10.0pt;font-family:Verdana; mso-bidi-font-family:Arial'><b> &l
<tr>
<td><span class="bodytext"><b>Contact:</b><b></b></span><span style='font-size:10.0pt;font-family:Verdana;
mso-bidi-font-family:Arial'><b> </b>
<span class="bodytext">John Doe</span>
</span></td>
</tr>
<tr>
<td><span class="bodytext">PO Box 2112</span></td>
</tr>
<tr>
<td><span class="bodytext"></span></td>
</tr>
<!--*********************************************************
-->
<tr>
<td><span class="bodytext"></span></td>
</tr>
<tr>
<td><span class="bodytext">JOHAN</span> NSW 9700</td>
</tr>
<tr>
<td><strong>Phone:</strong>
02 9999 9999
</td>
</tr>
联系人:
无名氏
邮政信箱2112
新南威尔士州约翰9700
电话:
02 9999 9999
基本上,我想抓取“联系人:”之后和“电话:”之前的所有内容,减去HTML;然而,这两个名称可能并不总是存在,所以我需要真正抓住两个冒号(:)之间的所有东西,它们不在HTML标记中。
***数据***
的数量实际上可能有所不同,因此我需要某种循环来匹配这些数据
我更喜欢使用正则表达式,因为我可以使用循环和字符串匹配来实现这一点
另外,我想知道PHP正则表达式中不匹配组的语法
任何帮助都将不胜感激 如果我理解正确,您只对HTML标记之间的文本感兴趣。要忽略HTML标记,只需先将其剥离:
$text = preg_replace('/<[^<>]+>/', '', $html);
要获取两个冒号之间的所有内容,请使用:
if (preg_match('/:([^:]*):/', $text, $regs)) {
$result = $regs[1];
} else {
$result = "";
}
对这类问题的看似任意的堆栈溢出响应似乎是“omg不要使用正则表达式!改用!!”。就我个人而言,我不喜欢在这样的小任务中使用外部库,正则表达式是一个很好的选择 去除所有HTML标记的一种简单方法是使用以下正则表达式:
$text = preg_replace("/<.*?>/", "", $text);
$text=preg\u replace(“//”,“,$text”);
然后,您可以使用任何您喜欢的方法来获取适当的文本内容
不匹配的组是这样的:
(?:这不匹配)
听起来像,或者在找到所需信息后也可以使用。那是什么?RegexBuddy给我的(?:这不匹配)是PERL-regex,但没有PHP选项无法确定…PHP的preg函数使用PCRE风格,这是RegexBuddy中的一个选项。nickf的回答漏掉了:在他编辑之前。我相信你(和OP)的意思是“非捕获组”,而不是“非匹配组”。一个不匹配的组是这样的:“(X(?)?
$text = preg_replace("/<.*?>/", "", $text);