正则表达式忽略具有特定文本的行

时间:2013-11-18 16:18:37

标签: regex

我在XHTML文件中有以下行:ri:content-title="Test Title Rename"/>

我也有与此类似的行:ri:content-title="Test Title Outside ri:space-key="Test"/>

我正在尝试整理一个搜索"/>的正则表达式,但忽略包含ri:space的行。

使用"(?!\s)允许我跳过存在" ri"的那一部分,但我想我不知道如何忽略整行。这样做的诀窍是我想用后缀替换"/>,例如3.12"/>,但我不想替换包含ri:space的行

请注意我将使用此正则表达式使用命令行工具批量更新Confluence页面。

以下是XHTML源代码阅读器的摘录:

<h2>Macro Update Test</h2>
<p>Below is the text and other elements.</p>
<p>
  <ac:macro ac:name="pagetree">
    <ac:parameter ac:name="root">Test Title Change Rename</ac:parameter>
  </ac:macro>
</p>
<p>Title and return link to <ac:link>
    <ri:page ri:content-title="Test Title Rename"/>
  </ac:link> should be updated.</p>
<p>Link to external location: <ac:link>
    <ri:page ri:content-title="Test Title Outside" ri:space-key="Test"/>
  </ac:link>.</p>

2 个答案:

答案 0 :(得分:0)

你可以试试这个正则表达式

 #  (ri:content-title\s*=\s*"[^"]*)"\s*/>     

 (                                  # (1 start)
      ri:content-title
      \s* = \s* 
      "
      [^"]* 
 )                                  # (1 end)

 " \s* 
 />

答案 1 :(得分:0)

由于我不知道你使用的正则表达式引擎,我给你一个原始样式的模式,让你逃避需要:

<\w+(?:[^"r>/]+|"(?>[^"]+|\\{2}|\\.)*"|\Br|r(?!i:[a-z]))*ri:content-title=(?:[^"r>/]+|"(?>[^"]+|\\{2}|\\.)*"|\Br|r(?!i:[a-z]))/>

正如三元组建议的那样,如果你有一些可以处理XML的工具......