找到&替换多个关键字定义字符串

时间:2015-05-15 09:36:48

标签: regex string replace

我试图删除SQL数据库中的以下字符串/行:

<p><span style="font-size:16px"><strong>The quick brown &nbsp;</strong></span><strong><span style="font-size:16px">fox jumps.</span></strong></p>
  1. 字符串始终以<p>开头,以</p>
  2. 结尾
  3. 字符串将始终按相同的顺序包含这些字词:Thequickbrown。但它们可能被其他东西(空格,&nbsp;或其他HTML标记)
  4. 分隔开来
  5. 字符串是包含更多文本嵌套HTML标记的字段的一部分,因此解决方案必须忽略更高级别的<p></p>标记。
  6. 我们正在谈论+ 20k比赛,请不要手动编辑解决方案:)
  7. 我已经尝试过使用RegExp,但我无法过滤多个关键字(AND运算符)。

    我可以将我的数据库导出到一个sql文件,这样我就可以使用你推荐的任何解决方案,Windows / Linux,文本编辑器,js脚本等等。但我会很感激最简单和优雅的解决方案。

3 个答案:

答案 0 :(得分:1)

我认为您必须将.*限制为效率更高但更精确的(?:(?!<\/?p[^<]*>).)*,以强制匹配1 <p>标记内的字词:

(?i)<p>(?:(?!<\/?p[^<]*>).)*the(?:(?!<\/?p[^<]*>).)*?quick(?:(?!<\/?p[^<]*>).)*?brown(?:(?!<\/?p[^<]*>).)*?<\/p>

请参阅demo

答案 1 :(得分:0)

这个表达式^<p>.*The.*quick.*brown.*</p>\$对我有用:

 [root@fedora ~]# grep "^<p>.*The.*quick.*brown.*</p>\$" test1.txt
<p><span style="font-size:16px"><strong>The quick brown &nbsp;</strong></span><strong><span style="font-size:16px">fox jumps.</span></strong></p>
<p><strong>The quick brown &nbsp;</strong></span><strong><span style="font-size:16px">fox jumps.</span></strong></p>
<p>The quick brown &nbsp;</strong></span><strong><span style="font-size:16px">fox jumps.</p>
[root@fedora ~]#

答案 2 :(得分:0)

您可以在任何编辑器(例如notepad ++)或javascript或任何带有gmi修饰符的PCRE引擎中使用以下内容:

^<p>.*?the.*?quick.*?brown.*?<\/p>$

因为您的陈述.*

而使用.+代替they MIGHT be separated by something else

并替换为''(空字符串)