我的目标是将尾随的所有实例 - 替换为标签括号内的尾随 + 。让我们假设要替换的行如下所示:
<h> aa- aa- </h> <h> ba- ba- </h>
然后应该看起来像
<h> aa+ aa+ </h> <h> ba+ ba+ </h>
首先我尝试了这个表达式:
s/<h>(.*?)-(.*?)<\/h>/<h>$1+$2<\/h>/g;
这产生了这个输出:
<h> aa+ aa- </h> <h> ba+ ba- </h>
g 选项确实会导致每行不止一次替换,但仅适用于每个标签括号的第一个实例(并且仅当两个圆括号都包含问号时)。
为了缩小问题范围,我尝试实现忽略标签的替换。表达方式
s/(.*?)-(.*?)/$1+$2/g;
确实导致了预期的结果
<h> aa+ aa+ </h> <h> ba+ ba+ </h>
当然,这也将替换标签括号之外的内容。
那么我的第一个表达式有什么问题,我怎样才能实现在标签括号内完全替换的目标?