<name>
我的名字是汤姆,但人们称我为XYZ但我的真名是汤米!</name
&gt;
示例:
(?<=<name>)[a-zA-Z]*(Tom)[a-zA-Z]*(?=<\/name>)
,
答案 0 :(得分:1)
找到:(?<=<name>)(.*?)(Tom)(?=\b.*</name>)
替换为:$1Harry
细节:
Balise名称:(?<=<name>)
姓名与汤姆(.*?)
之间的任何内容
汤姆(Tom)
检查Tom (?=\b
字的结尾的boudary
汤姆与结束名称balise .*
之间的任何内容
结束应答</name>)
重新显示应答器名称和tom $1
之间的内容
由哈利替换汤姆Harry
答案 1 :(得分:1)
由于name
标记内部不能包含任何其他标记,因此可以解决问题的正则表达式是
(?:\G(?!^)|<name>)[^<]*?\K\bTom\b
请参阅regex demo。替换为Harry
。
<强>详情
(?:\G(?!^)|<name>)
- 上一次成功匹配(\G(?!^)
)或(|
)<name>
子字符串[^<]*?
- <
以外的任何0 +字符,尽可能少\K
- 匹配重置运算符\bTom\b
- 整个字Tom
(如果您需要匹配\b
中的Tom
,请移除Tommy
字边界。注意:如果您还想与Tommy
匹配,请将\bTom\b
替换为\bTom(?:my)?\b
。