[英]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>
我需要在扩展名为.rock
的href
前面添加前缀“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 中执行此操作的正则表达式是什么?
重新写了我的答案
我回答的第一种情况是没有一个 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="
([^"]*)
- 这将创建第一个反向引用 - 告诉引擎查找并记住括号之间的所有内容: [^"]*
以便我们可以在替换部分中引用它。
[^"]
- 模式的这一部分表示不是双引号的任何字符。[^"]*
末尾的星号是一个重复模式,表示查找零个或多个与其前面的内容匹配的字符(因此找到零个或多个不是双引号的字符)。\\.rock"
这定义了模式的其余部分必须是.rock"
\\.
. 那是因为句点在正则表达式中具有特殊含义,我们告诉正则表达式我们的意思是文字点或句点。href="X\\1.rock"
href="X
- 表示从字面上输出href="X
..\\1
- 表示将\\1
替换为我们创建的第一个反向引用(零个或多个不是双引号的字符)。.rock"
- 说.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 的字符。[^"]
- 模式的这一部分表示不是双引号的任何字符。[^"]*
末尾的星号是一个重复模式,表示查找零个或多个与其前面的内容匹配的字符(因此找到零个或多个不是双引号的字符)。\\.rock"
这定义了模式的其余部分必须是.rock"
\\.
. 那是因为句点在正则表达式中具有特殊含义,我们告诉正则表达式我们的意思是文字点或句点。href="X\\1.rock"
href="X
- 表示从字面上输出href="X
..\\1
- 表示将\\1
替换为我们创建的第一个反向引用(零个或多个不是双引号的字符)。.rock"
- 说.rock"
字面意思输出.rock"
。
我不确定 Ultraedit,但我认为它接近记事本 ++:
找到什么: (href=")(.+?\\.rock")
替换为: $1X$2
X
或Z
因为您的问题不清楚。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.