簡體   English   中英

正則表達式替換文本

[英]Regular expression to replace text

我對正則表達式很陌生。 我正在使用 UltraEdit,並希望使用正則表達式進行下面描述的更改。

我有以下模式的一些文本:

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

我需要在擴展名為.rockhref前面添加前綴“Z”。

href="000760.rock" --> href="Z000760.rock"

輸出應如下所示:

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

在 UltraEdit 中執行此操作的正則表達式是什么?

重新寫了我的答案

  1. 添加新的用例 OP,其中某些值具有 X 前綴且不得替換。
  2. 當不需要時,我最初將雙引號字符放在括號中。

我回答的第一種情況是沒有一個 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>

顯示第一個結果的屏幕截圖如下。

顯示第一個結果的屏幕截圖。

正則表達式分解:

  1. 查找: href="([^"]*)\\.rock"
    1. href=" - 這找到了href="
    2. ([^"]*) - 這將創建第一個反向引用 - 告訴引擎查找並記住括號之間的所有內容: [^"]*以便我們可以在替換部分中引用它。
      1. [^"] - 模式的這一部分表示不是雙引號的任何字符。
      2. [^"]*末尾的星號是一個重復模式,表示查找零個或多個與其前面的內容匹配的字符(因此找到零個或多個不是雙引號的字符)。
    3. \\.rock"這定義了模式的其余部分必須是.rock"
    4. 請注意,我已經轉義了句點字符: \\. . 那是因為句點在正則表達式中具有特殊含義,我們告訴正則表達式我們的意思是文字點或句點。
  2. 替換: href="X\\1.rock"
    1. href="X - 表示從字面上輸出href="X ..
    2. \\1 - 表示將\\1替換為我們創建的第一個反向引用(零個或多個不是雙引號的字符)。
    3. .rock" - 說.rock"字面意思輸出.rock"
      1. 請注意,我不需要在這里轉義句點,因為它在替換中沒有相同的含義 - 它只是表示文字點。

第二種情況是響應 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>

顯示第二個結果的屏幕截圖如下。

顯示第二個結果的屏幕截圖。

正則表達式分解:

  1. 查找: href="([^X][^"]*)\\.rock"
    1. href=" - 這找到了href="
    2. ([^X][^"]*) - 這將創建第一個反向引用 - 告訴引擎查找並記住括號之間的所有內容: ([^X][^"]*)*以便我們可以在替換部分。
      1. [^X]* - 模式的這一部分表示任何不是 X 的字符。
      2. [^"] - 模式的這一部分表示不是雙引號的任何字符。
      3. [^"]*末尾的星號是一個重復模式,表示查找零個或多個與其前面的內容匹配的字符(因此找到零個或多個不是雙引號的字符)。
    3. \\.rock"這定義了模式的其余部分必須是.rock"
    4. 請注意,我已經轉義了句點字符: \\. . 那是因為句點在正則表達式中具有特殊含義,我們告訴正則表達式我們的意思是文字點或句點。
  2. 替換: href="X\\1.rock"
    1. href="X - 表示從字面上輸出href="X ..
    2. \\1 - 表示將\\1替換為我們創建的第一個反向引用(零個或多個不是雙引號的字符)。
    3. .rock" - 說.rock"字面意思輸出.rock"
      1. 請注意,我不需要在這里轉義句點,因為它在替換中沒有相同的含義 - 它只是表示文字點。

我不確定 Ultraedit,但我認為它接近記事本 ++:

找到什么: (href=")(.+?\\.rock")
替換為: $1X$2

XZ因為您的問題不清楚。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM