我对正则表达非常新。我正在使用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
答案 0 :(得分: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>
显示第一个结果的屏幕截图如下。
正则表达式的细分:
href="([^"]*)\.rock"
href="
- 找到href="
([^"]*)
- 这会创建第一个反向引用 - 告诉引擎查找并记住括号之间的所有内容:[^"]*
,以便我们可以在替换部分中引用它。
[^"]
- 模式的这一部分表示任何不是双引号的字符。[^"]*
末尾的星号是一个重复模式,表示查找与之前的事物匹配的零个或多个字符(因此找到零个或多个不是双引号的字符)。< / LI>
\.rock"
这定义了必须为.rock"
\.
。这是因为句号在正则表达式中具有特殊含义,我们告诉正则表达式我们的意思是字面点或句点。href="X\1.rock"
href="X
- 按字面意思输出href="X
.. \1
- 表示将\1
替换为我们创建的第一个反向引用(零个或多个不是双引号的字符)。.rock"
- 表示按字面输出.rock"
。
第二种情况是对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>
显示第二个结果的屏幕截图如下。
正则表达式的细分:
href="([^X][^"]*)\.rock"
href="
- 找到href="
([^X][^"]*)
- 这会创建第一个反向引用 - 告诉引擎查找并记住括号之间的所有内容:([^X][^"]*)*
,以便我们可以在替换部分中引用它。
[^X]*
- 模式的这一部分表示任何不是X的字符。[^"]
- 模式的这一部分表示任何不是双引号的字符。[^"]*
末尾的星号是一个重复模式,表示查找与之前的事物匹配的零个或多个字符(因此找到零个或多个不是双引号的字符)。< / LI>
\.rock"
这定义了必须为.rock"
\.
。这是因为句号在正则表达式中具有特殊含义,我们告诉正则表达式我们的意思是字面点或句点。href="X\1.rock"
href="X
- 按字面意思输出href="X
.. \1
- 表示将\1
替换为我们创建的第一个反向引用(零个或多个不是双引号的字符)。.rock"
- 表示按字面输出.rock"
。
答案 1 :(得分:1)
我不确定Ultraedit,但我认为它接近记事本++:
找到:(href=")(.+?\.rock")
替换为:$1X$2
X
或Z
因为您的问题不明确。