正则表达式替换文本

时间:2014-02-12 16:08:02

标签: regex ultraedit

我对正则表达非常新。我正在使用Ultra Edit,并希望使用正则表达式进行更新,如下所示:

我有以下模式的文字。

<Music href="6000111.genre" title="AAA">
    <Music format="ditamap" href="000760.rock" title="222"/>
    <Music format="ditamap" href="000756.rock" title="333"/>
</Music>

我需要在扩展名.rock中添加带有href的前缀'Z'。 那就是href =“000760.rock - &gt; href =”Z000760.rock

我应该得到以下结果:

<Music href="6000111.genre" title="AAA">
    <Music format="ditamap" href="X000760.rock" title="222"/>
    <Music format="ditamap" href="X000756.rock" title="333"/>
</Music>

真的很感谢你的帮助。 问候, RNV

2 个答案:

答案 0 :(得分:2)

重写我的回答

  1. 添加新的用例OP,其中某些值具有X前缀且不得替换。
  2. 我最初在没有必要时将双引号字符放在括号中。

  3. 我回答的第一个案例是没有任何HREF值已经有X前缀。

    查找

    href="([^"]*)\.rock"
    

    并替换:

    href="X\1.rock"
    

    开始:

    <Music href="6000111.genre" title="AAA">
        <Music format="ditamap" href="000760.rock" title="222"/>
        <Music format="ditamap" href="000756.rock" title="333"/>
    </Music>
    

    完成:

    <Music href="6000111.genre" title="AAA">
        <Music format="ditamap" href="X000760.rock" title="222"/>
        <Music format="ditamap" href="X000756.rock" title="333"/>
    </Music>
    

    显示第一个结果的屏幕截图如下。

    Screen shot showing first result.

    正则表达式的细分:

    1. 查找:href="([^"]*)\.rock"
      1. href=" - 找到href="
      2. ([^"]*) - 这会创建第一个反向引用 - 告诉引擎查找并记住括号之间的所有内容:[^"]*,以便我们可以在替换部分中引用它。
        1. [^"] - 模式的这一部分表示任何不是双引号的字符。
        2. [^"]*末尾的星号是一个重复模式,表示查找与之前的事物匹配的零个或多个字符(因此找到零个或多个不是双引号的字符)。< / LI>
      3. \.rock"这定义了必须为.rock"
      4. 的模式的其余部分
      5. 请注意,我已转义句点字符:\.。这是因为句号在正则表达式中具有特殊含义,我们告诉正则表达式我们的意思是字面点或句点。
    2. 替换:href="X\1.rock"
      1. href="X - 按字面意思输出href="X ..
      2. \1 - 表示将\1替换为我们创建的第一个反向引用(零个或多个不是双引号的字符)。
      3. .rock" - 表示按字面输出.rock"
        1. 请注意,我不需要在此处转义句点,因为它在替换中没有相同的含义 - 它只是意味着文字点。

    3. 第二种情况是对OP的评论的回应,即一些HREF值已经有了X前缀。在这种情况下,请更改正则表达式,如下所示。

      查找

      href="([^X][^"]*)\.rock"
      

      并替换:

      href="X\1.rock"
      

      开始:

      <Music href="6000111.genre" title="AAA">
          <Music format="ditamap" href="000760.rock" title="222"/>
          <Music format="ditamap" href="X000756.rock" title="333"/>
          <Music format="ditamap" href="000757.rock" title="444"/>
          <Music format="ditamap" href="X000758.rock" title="555"/>
          <Music format="ditamap" href="000759.rock" title="666"/>
      </Music>
      

      完成:

      <Music href="6000111.genre" title="AAA">
          <Music format="ditamap" href="X000760.rock" title="222"/>
          <Music format="ditamap" href="X000756.rock" title="333"/>
          <Music format="ditamap" href="X000757.rock" title="444"/>
          <Music format="ditamap" href="X000758.rock" title="555"/>
          <Music format="ditamap" href="X000759.rock" title="666"/>
      </Music>
      

      显示第二个结果的屏幕截图如下。

      Screen shot showing second result.

      正则表达式的细分:

      1. 查找:href="([^X][^"]*)\.rock"
        1. href=" - 找到href="
        2. ([^X][^"]*) - 这会创建第一个反向引用 - 告诉引擎查找并记住括号之间的所有内容:([^X][^"]*)*,以便我们可以在替换部分中引用它。
          1. [^X]* - 模式的这一部分表示任何不是X的字符。
          2. [^"] - 模式的这一部分表示任何不是双引号的字符。
          3. [^"]*末尾的星号是一个重复模式,表示查找与之前的事物匹配的零个或多个字符(因此找到零个或多个不是双引号的字符)。< / LI>
        3. \.rock"这定义了必须为.rock"
        4. 的模式的其余部分
        5. 请注意,我已转义句点字符:\.。这是因为句号在正则表达式中具有特殊含义,我们告诉正则表达式我们的意思是字面点或句点。
      2. 替换:href="X\1.rock"
        1. href="X - 按字面意思输出href="X ..
        2. \1 - 表示将\1替换为我们创建的第一个反向引用(零个或多个不是双引号的字符)。
        3. .rock" - 表示按字面输出.rock"
          1. 请注意,我不需要在此处转义句点,因为它在替换中没有相同的含义 - 它只是意味着文字点。

答案 1 :(得分:1)

我不确定Ultraedit,但我认为它接近记事本++:

找到:(href=")(.+?\.rock")
替换为:$1X$2

XZ因为您的问题不明确。