正则表达式匹配 Html 标签和内部 Html 模式
Regex Match Html Tag and Inner Html Pattern
我抓取了一个网页,我正在尝试从没有 class 或 ID 的 td
中提取数据。假设我有以下 html:
<table>
<tr>
<td>Title</td>
<td>The Harsh Face of Mother Nature</td>
</tr>
.
.
.
</table>
我正在尝试 preg_match
:
$title = preg_match("\(>Title)(.*?)(?=<\/td\>{2})\", $html);
我的模式以 >Title
开始,结束是 </td>
的第 2 次出现。
我一直在与 https://regex101.com/ 合作试图解决这个问题,但正则表达式真的很难!特别是对于我想要完成的晦涩的东西。有什么帮助吗?谢谢!
(编辑如下:)
目标是获得类似 </td><td>The Harsh Face of Mother Nature
的刺痛,然后进行另一场预匹配以删除第一部分并获得 The Harsh Face of Mother Nature
的最终产品
您可以在 preg_match 或 preg_match_all
中使用以下正则表达式
>Title.*?<\/td>.*?<td>\K.*?(?=<\/td>)
$re = "/>Title.*?<\/td>.*?<td>\K.*?(?=<\/td>)/s";
$str = "<table> \n <tr>\n <td>Title</td>\n <td>The Harsh Face of Mother Nature</td>\n </tr>\n .\n .\n .\n</table>";
preg_match_all($re, $str, $matches);
您可以试试这个正则表达式 .*\<table\>\s*\<tr\>\s*\s*\<td\>title\<\/td>\s*\<td\>((\w*\s*\w*)*)<\/td>.*
它将在第一组中捕获 <td>title</td>
之后的 <td>
标记的内容,后者位于 <table>
之后标签。
用js第n子属性搞定
$( "table tr td:nth-child(2)" )
尝试另一种方法: >Title.*?(?=<td>)<td>\K.*?(?=<\/td>)
$re = "/>Title.*?(?=<td>)<td>\K.*?(?=<\/td>)/s";
$str = "<table> \n <tr>\n <td>Title</td>\n <td>The Harsh Face of Mother Nature</td>\n <td>The Harsh Face of Mother Nature</td>\n </tr>\n .\n .\n .\n</table>";
preg_match_all($re, $str, $matches);
我抓取了一个网页,我正在尝试从没有 class 或 ID 的 td
中提取数据。假设我有以下 html:
<table>
<tr>
<td>Title</td>
<td>The Harsh Face of Mother Nature</td>
</tr>
.
.
.
</table>
我正在尝试 preg_match
:
$title = preg_match("\(>Title)(.*?)(?=<\/td\>{2})\", $html);
我的模式以 >Title
开始,结束是 </td>
的第 2 次出现。
我一直在与 https://regex101.com/ 合作试图解决这个问题,但正则表达式真的很难!特别是对于我想要完成的晦涩的东西。有什么帮助吗?谢谢!
(编辑如下:)
目标是获得类似 </td><td>The Harsh Face of Mother Nature
的刺痛,然后进行另一场预匹配以删除第一部分并获得 The Harsh Face of Mother Nature
您可以在 preg_match 或 preg_match_all
中使用以下正则表达式>Title.*?<\/td>.*?<td>\K.*?(?=<\/td>)
$re = "/>Title.*?<\/td>.*?<td>\K.*?(?=<\/td>)/s";
$str = "<table> \n <tr>\n <td>Title</td>\n <td>The Harsh Face of Mother Nature</td>\n </tr>\n .\n .\n .\n</table>";
preg_match_all($re, $str, $matches);
您可以试试这个正则表达式 .*\<table\>\s*\<tr\>\s*\s*\<td\>title\<\/td>\s*\<td\>((\w*\s*\w*)*)<\/td>.*
它将在第一组中捕获 <td>title</td>
之后的 <td>
标记的内容,后者位于 <table>
之后标签。
用js第n子属性搞定
$( "table tr td:nth-child(2)" )
尝试另一种方法: >Title.*?(?=<td>)<td>\K.*?(?=<\/td>)
$re = "/>Title.*?(?=<td>)<td>\K.*?(?=<\/td>)/s";
$str = "<table> \n <tr>\n <td>Title</td>\n <td>The Harsh Face of Mother Nature</td>\n <td>The Harsh Face of Mother Nature</td>\n </tr>\n .\n .\n .\n</table>";
preg_match_all($re, $str, $matches);