在正则表达式中反转匹配

时间:2015-12-02 17:23:37

标签: regex

有没有办法(或可能)使用正则表达式来反转匹配模式(不是预先给定的单词)?

e.g。

输入字符串:

a:b, c:d, a:b1,s:sad

模式是

a:[^,]+,?

此模式匹配" a:b,"和" a:b1,"在字符串中。我可以替换/反转匹配剩余部分,即" C:d"并且" s:悲伤"不使用grep -v -e?

e.g。继续,演示输出用" [TAG]":

替换剩余部分
a:b,[TAG], a:b1,[TAG]

[^ pattern]或(?!pattern)技巧失败,此处不允许使用带-e -v选项的grep。

谢谢!

2 个答案:

答案 0 :(得分:1)

表达式

/((a:[^,]+,?\s?)(((?!a:[^,]+).)+(,|$))+)/\2[TAG]\5/g

将取代

a:b, c:d, a:b1,s:sad

a:b, [TAG], a:b1,[TAG]

但是我不确定我理解你对(?!pattern)不起作用的评论。我正在https://regex101.com/进行测试。

答案 1 :(得分:0)

[^,:]+(?<!\ba):[^,]+,?

您可以将其与grep -P一起使用。请参阅演示。

https://regex101.com/r/hE4jH0/25