Regex 我有一个正则表达式,它为排除的单词返回零值。我怎样才能不退货呢?

Regex 我有一个正则表达式,它为排除的单词返回零值。我怎样才能不退货呢?,regex,ruby,Regex,Ruby,给定以下测试字符串: {{one}} <content>{{two}}</content> {{three}} {{one} {{two} {{3}} 我只想匹配{{one}和{{{two}。我有以下正则表达式: {{((?!#)(?!\/).*?)}}|(?:<content\b[^>]*>[^<>]*<\/content>) {((?!\)(?!\/).*}}}{124;(?:]*>[^]*) 与{one}和{{t

给定以下测试字符串:

{{one}}

<content>{{two}}</content>

{{three}}
{{one}
{{two}
{{3}}
我只想匹配{{one}和{{{two}。我有以下正则表达式:

{{((?!#)(?!\/).*?)}}|(?:<content\b[^>]*>[^<>]*<\/content>)
{((?!\)(?!\/).*}}}{124;(?:]*>[^]*)
与{one}和{{three}匹配,但也与nil值匹配(请参阅:)。我如何只匹配{one}和{{three}}而不匹配nil值


(也就是说,正则表达式应该只返回两个匹配项,而不是三个匹配项)

摘自您的评论:

我有大量的文本,我想使用ruby的gsub方法替换
标记之外的{{tags}}

这个正则表达式应该做什么,您需要什么:

(^{{(?!#|\/).*}}$)
这既匹配
{{one}}
{{three}}
,也匹配类似的插值△la
{tag}
,除了那些:
{tag}


我可以只忽略标记而不忽略其他标记吗?例如,我在这里尝试了标记:rubular.com/r/jTKxwjNuKoSjgN,我不想忽略它

当然可以。试试这个:

(?!<content>)({{(?!#|\/).*?}})(?!<\/content>)
(?!)({{(?)

如果您需要解释此正则表达式的工作方式和原因,可以查看此处的解释部分:

摘自您的评论:

我有大量的文本,我想使用ruby的gsub方法替换
标记之外的{{tags}}

这个正则表达式应该做什么,您需要什么:

(^{{(?!#|\/).*}}$)
这既匹配
{{one}}
{{three}}
,也匹配类似的插值△la
{tag}
,除了那些:
{tag}


我可以只忽略标记而不忽略其他标记吗?例如,我在这里尝试了标记:rubular.com/r/jTKxwjNuKoSjgN,我不想忽略它

当然可以。试试这个:

(?!<content>)({{(?!#|\/).*?}})(?!<\/content>)
(?!)({{(?)

如果您需要解释这个正则表达式是如何工作的以及为什么工作的,您可以查看这里的解释部分:

我建议分两个步骤来处理更复杂的字符串。我假设字符串“1”和“3”将从以下字符串中提取

str = <<-_
{{one}}
<content>cats {{two}} and <content2>{{four}}</content2> dogs</content>
{{three}}
_
第一步是:

str.gsub(r0, '')
  #=> "{{one}}\n\n{{three}}\n"
如果字符串的第二行是

"<content>{{two}}</content>\n"
“{{two}}\n”
这两个正则表达式按惯例编写如下

r0 = /<([^>]+)>.+?<\/\1>/
r1 = /(?<=\{\{)[^\}]+(?=\}\})/
r0=/]+)>。+/

r1=/(?我建议分两步进行,以适应更复杂的字符串。我假设字符串“1”和“3”将从以下字符串中提取

str = <<-_
{{one}}
<content>cats {{two}} and <content2>{{four}}</content2> dogs</content>
{{three}}
_
第一步是:

str.gsub(r0, '')
  #=> "{{one}}\n\n{{three}}\n"
如果字符串的第二行是

"<content>{{two}}</content>\n"
“{{two}}\n”
这两个正则表达式按惯例编写如下

r0 = /<([^>]+)>.+?<\/\1>/
r1 = /(?<=\{\{)[^\}]+(?=\}\})/
r0=/]+)>。+/

r1=/(?这是使用正则表达式的要求吗?这看起来更像某种模板解析器,在我看来,这样处理会更容易,特别是当您需要维护或更改它时。抱歉,我不确定您的意思,但我确实想使用正则表达式。我有大量文本,我想使用ruby的gsub方法来替换{{tags}}在标记之外。我的意思是,对这样的任务使用正则表达式很难维护和扩展。您可以说“给定以下内容”然后显示三行文本。这是一个字符串、三个字符串、文本文件的图像还是其他?如果是一个或三个字符串,请添加引号,使它们成为有效的Ruby对象。是否要匹配
“{{{{{one}}”
?您说只想匹配
{one}
{two}
,然后只匹配
{one}}
{{three}
。抱歉,卡里,这是我的测试字符串。为了更清晰起见,我编辑了上面的部分。这是您使用正则表达式的要求吗?这似乎更像某种模板解析器,在我看来,这样处理会更容易,尤其是当您需要维护或更改它时。抱歉,我不确定您的意思,但我确实想使用正则表达式。我有大量的文本,我想使用ruby的gsub方法来替换标记之外的{{tags}}。我的意思是,对于这样的任务,使用正则表达式很难维护和扩展。你说“给定以下内容”然后显示三行文本。这是一个字符串、三个字符串、文本文件的图像还是其他?如果是一个或三个字符串,请添加引号,使它们成为有效的Ruby对象。是否要匹配
“{{{{{one}}”
?您说只想匹配
{one}
{two}
,然后只匹配
{one}}
{{three}
。抱歉,Cary,这是我的测试字符串。为了更清晰,我编辑了上面的部分。很好的解释和另一种很好的方法!感谢您将部分分解为正则表达式。信息量很大。谢谢Cary!!很好的解释和另一种很好的方法!感谢您将部分分解为正则表达式.信息量大。谢谢你,卡里!!