Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何创建正则表达式以匹配内部所有内容,包括<;div></部门>;?_Regex_Html Parsing - Fatal编程技术网

Regex 如何创建正则表达式以匹配内部所有内容,包括<;div></部门>;?

Regex 如何创建正则表达式以匹配内部所有内容,包括<;div></部门>;?,regex,html-parsing,Regex,Html Parsing,这是我正在处理的示例文本。我用尾波来寻找和替换 <td width="20%"><div > Item #</div></td> <td width="20%"><div > Pole Tip</div></td> <td width="20%"><div > Length</div></td> <td width="20%"><div

这是我正在处理的示例文本。我用尾波来寻找和替换

<td width="20%"><div > Item #</div></td>
<td width="20%"><div > Pole Tip</div></td>
<td width="20%"><div > Length</div></td>
<td width="20%"><div > Test Weight (lbs.)</div></td>
<td width="20%"><div > Price</div></td>
项目#
杆尖
长度
试验重量(磅)
价格
我想去掉在td中标记文本的div标记

我想改变这个:

<td width="20%"><div > Item #</div></td>
项目#
为此:

<td width="20%">Item #</td>
项目#

到目前为止,我将此作为正则表达式:

<div >[\s\w\(\)#]*</div>
[\s\w\(\)\]*
但是,这与我的示例文本中的上述所有内容相匹配,除了:

<td width="20%"><div > Test Weight (lbs.)</div></td>
试验重量(磅)

在我的正则表达式中,我甚至尝试添加(和)…我做错了什么?

那是因为你错过了
这很好

<div >[\s\w\(\)#.]*</div>
[\s\w\(\)\。]*

作为对Andy的回复,我同意格式良好的标记的数据解析应该保留给DOM导航工具。当然是XML,或者HTML>XML转换器都很好。我不知道Miles使用的是什么,但我经常使用格式非常不正确的HTML,以至于标记解析器无法解析它

在我的一些关于文档解析的正则表达式教程中,我讨论了正则表达式修剪模式,它只是零个或多个空格{\s*}。尽管您可能会回避它,因为它为Regex模式增加了一点点长度,但实际上效率损失为零。话虽如此

(<td[^>]*>)\s*<div[^>]*>\s*((?:[^<]*(?(?!</div>\s*</td>)<))*)\s*</div>\s*(</td>)

(]*>)\s*]*>\s*(?:[^虽然正则表达式可能适用于此特定代码,但正则表达式是解析HTML代码的脆弱解决方案。解释了原因。更安全的解决方案是使用适当的HTML解析器。您使用的是什么语言?@AndyLester:我继承了一些我正试图清理的HTML。我使用Coda作为编辑器,我想进行全局搜索和替换。所以我“句点”缺少“.”?Doh!为什么我不必转义“.”?如果它在字符类中,则不需要转义它。如果不需要正则表达式中的TD包装器,您还将删除页面上所有的div标记。此外,如果有%symbol?或除磅以外的任何其他符号,该怎么办?这是一个奇怪的限制字符c如果答案是你只是在替换你的例子中的确切文本,那么甚至不用正则表达式,只使用字符串文字替换。这个正则表达式非常脆弱。