正则表达式替换 - 有条件地添加字符

时间:2015-07-17 20:31:15

标签: regex

我正在尝试进行正则表达式查找和替换,但在替换中,我只想在找到其中一个匹配组的匹配项时添加一个字符。例如:

对于文字ab,我使用正则表达式(a)?(b)?来匹配多个组。我希望将结果替换为\1.\2以生成a.b当且仅当实际找到b时才会生成a。在仅找到a的情况下,结果应包含句点,即仅name="name" property="property"

我知道这可以通过两个步骤完成,但这种条件插入是否可以使用单个正则表达式语句?

修改

我稍微简化了我的测试用例。我的实际情况如下:

我需要以任何顺序匹配value="name.property"(名称字段可以是第一个或最后一个。

我希望在找不到案例属性的情况下将其替换为value="name"或简单地mysql_query("SET NAMES utf8");

3 个答案:

答案 0 :(得分:1)

分多步完成。首先进行找到两个字符串的替换:

s/name="(.*?)" property="(.*?)"/value="\1.\2"/
s/property="(.*?)" name="(.*?)"/value="\2.\1"/

然后用一个字符串替换剩下的字符串:

s/name="(.*)"/value="\1"/

答案 1 :(得分:1)

正如几条评论所述,在基本文本编辑器的搜索和替换中无法做到这一点。它只能通过回调或外部代码来完成。

我最后分两步完成:用\1.\2替换,然后搜索并替换任何悬空时段。

答案 2 :(得分:0)

是的,有可能:

<强> Online Demo

([a])?[b](?(1)[c]|[d])

http://www.regular-expressions.info/conditional.html