REGEX替换所有的“;风格=';任何事'&引用;除了在桌子里

REGEX替换所有的“;风格=';任何事'&引用;除了在桌子里,regex,Regex,我正在解析html。我知道这不应该用正则表达式,而应该用dom/xpath。在我的情况下,它应该只是快速,简单,没有整洁,所以我选择了正则表达式 该任务将用空字符串替换所有style='xxx',表中除外 preg_replace的这个正则表达式可以捕获所有style='xxx',无论在哪里: '/ style="([^"]+)"/s' 内容可以是这样的 或者只是简单的非嵌套表,这意味着正则表达式应该排除嵌套表中的所有style=''.' 有一个简单的语法可以做到这一点吗? 不,真的,

我正在解析html。我知道这不应该用正则表达式,而应该用dom/xpath。在我的情况下,它应该只是快速,简单,没有整洁,所以我选择了正则表达式

该任务将用空字符串替换所有
style='xxx'
,表中除外

preg_replace的这个正则表达式可以捕获所有
style='xxx'
,无论在哪里:

'/ style="([^"]+)"/s'
内容可以是这样的


或者只是简单的非嵌套表,这意味着正则表达式应该排除嵌套表中的所有
style=''.'

有一个简单的语法可以做到这一点吗?


不,真的,你不应该


正如您的示例所证明的,您可以期望嵌套表。这意味着正则表达式应该跟踪嵌套的级别,以决定您是否在表中。如果你找到一种方法来解决这个问题,它肯定不会是“快速而简单的”。

电子邮件,重新提出这个问题,因为它有一个没有提到的正则表达式。(在为某个客户进行研究时发现了您的问题。)

所有关于使用正则表达式解析html的免责声明,下面是一个简单的方法

首先,我们需要一个正则表达式来匹配表,不管是否嵌套。这通过简单的递归实现:

<table(?:.*?(?R).*?|.*?)</table>

no正则表达式不必跟踪嵌套表。有正确的修饰符可以使用,只查找我给定的正则表达式,它不在@Email not the point中;你试图使用错误的工具来完成这项工作。
<table(?:.*?(?R).*?|.*?)</table>
(?s)<table(?:.*?(?R).*?|.*?)<\/table>(*SKIP)(*F)|style=(['"])[^'"]*\1