【问题标题】:Perl Regex - Search and replace between tags only if string is in-between [closed]Perl Regex - 仅当字符串介于两者之间时才在标签之间搜索和替换[关闭]
【发布时间】:2016-02-18 07:05:21
【问题描述】:

我正在尝试提出一个正则表达式,它将匹配具有“ThisIsImportant”的整个标签(包括标签本身),而不匹配其他任何一个:

<tag>
  <random attribute="ThisIsNotImportant" />
</tag>

<tag>
  <random attribute="ThisIsImportant" />
</tag>

<tag>
  <random attribute="ThisIsAlsoNotImportant" />
</tag>

到目前为止,我已经得到了“.*?”,但我不知道如何制作它,所以我只匹配具有“ThisIsImportant”的那个。谁能提供一些帮助?

提前致谢。

编辑:为清楚起见,我想匹配整个“”。

我正在尝试使用 perl 可执行文件在 Bash 中执行此操作,并且正在避免使用 xmlstarlet 之类的东西,因为我需要在其上运行脚本的环境无法访问此应用程序。

【问题讨论】:

  • 您使用哪种编程语言或工具执行此操作?请编辑您的问题并添加适当的标签。
  • 我已添加要求的信息
  • You know that regex is particularly ill-suited to parsing HTML, right??如果您使用 perl 编程,XML::DOMMojo::DOM 不是一个选项吗?如果您在 bash 中编程,您是否选择这样做?而且..你试过什么?我们无法帮助您修复未见过的代码。
  • 这里已经说了一遍又一遍,如果您正在处理 XML,那么请使用 XML 解析器。正则表达式对很多事情都有好处,但不能处理不规则的语法
  • tags themselves 是什么意思?您是在寻找具有该属性值的 标签,还是在寻找结束标签,以及介于两者之间的所有标签?

标签: regex bash perl


【解决方案1】:

要获得最接近 ThisIsImportant 的起始标记,请使用否定标记
标签本身的断言。

/&lt;tag&gt;(?:(?!&lt;tag&gt;).)*ThisIsImportant.*?&lt;\/tag&gt;/

格式化:

 <tag>
 (?:
      (?! <tag> )
      . 
 )*
 ThisIsImportant
 .*? 
 </tag> 

【讨论】:

    猜你喜欢
    • 2021-06-02
    • 1970-01-01
    • 2021-09-29
    • 2015-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-04
    • 2013-11-26
    相关资源
    最近更新 更多