匹配除正则表达式模式之外的所有内容

时间:2021-02-24 07:39:10

标签: regex ruby

我有一个xml内容如下

<html>
<head><title>502 Bad Gateway</title></head>
<body>
<center><h1>502 Bad Gateway</h1></center>
</body>
</html>

在上面的内容中,除了标题中的 502 Bad Gateway 之外,我想修改所有内容。

我使用下面的正则表达式来匹配502 Bad Gateway

(?<=title>)(.*?)(?=<\/title>)

谁能告诉我如何否定它?

我尝试了以下建议

(?!((?<=title>)(.*?)(?=<\/title>)))
[^((?<=title>)(.*?)(?=<\/title>))]

但他们没有工作。

我正在使用 ruby​​ 正则表达式

3 个答案:

答案 0 :(得分:0)

您想获取与 regEx 不匹配的所有内容吗?

使用您喜欢的语言保存您的结果。

使用一些工具,例如:

  • WinMerge
  • 无与伦比
  • KDiff3
  • DiffMerge
  • 合并
  • ...

其中一些可以生成补丁。使用 File -> Open... 打开两个版本进行比较。这将使您对您所做的更改有一个很好的了解。 https://docs.moodle.org/dev/How_to_create_a_patch#Creating_a_patch_using_WinMerge

答案 1 :(得分:0)

您可以使用 sub 删除 title 中的“502 Bad Gateway”:

xml = "<head><title>502 Bad Gateway</title></head>"
xml.sub("<title>502 Bad Gateway</title>", "<title></title>")
# => "<head><title></title></head>"

答案 2 :(得分:0)

对 ruby​​ 不是很熟悉,但我认为 regex 的功能与 PCRE 相似,它支持控制动词和递归。

这是与您的描述相匹配的正则表达式:

((?<=title>)502 Bad Gateway(?=<\/title>))(*SKIP)(*F)|(?:(?!(?1))[\s\S])+

proof