我正在尝试进行正则表达式查找和替换,但在替换中,我只想在找到其中一个匹配组的匹配项时添加一个字符。例如:
对于文字ab
,我使用正则表达式(a)?(b)?
来匹配多个组。我希望将结果替换为\1.\2
以生成a.b
当且仅当实际找到b
时才会生成a
。在仅找到a
的情况下,结果应不包含句点,即仅name="name" property="property"
。
我知道这可以通过两个步骤完成,但这种条件插入是否可以使用单个正则表达式语句?
修改
我稍微简化了我的测试用例。我的实际情况如下:
我需要以任何顺序匹配value="name.property"
(名称字段可以是第一个或最后一个。
我希望在找不到案例属性的情况下将其替换为value="name"
或简单地mysql_query("SET NAMES utf8");
。
答案 0 :(得分:1)
分多步完成。首先进行找到两个字符串的替换:
s/name="(.*?)" property="(.*?)"/value="\1.\2"/
s/property="(.*?)" name="(.*?)"/value="\2.\1"/
然后用一个字符串替换剩下的字符串:
s/name="(.*)"/value="\1"/
答案 1 :(得分:1)
正如几条评论所述,在基本文本编辑器的搜索和替换中无法做到这一点。它只能通过回调或外部代码来完成。
我最后分两步完成:用\1.\2
替换,然后搜索并替换任何悬空时段。
答案 2 :(得分:0)