2015-12-02 87 views
3

是否有任何方式(或可能)使用正则表达式匹配模式(不是预先给定的单词)?反转匹配正则表达式

例如

输入字符串:

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

的图案是

a:[^,]+,? 

此模式匹配 “A:B” 和 “A:B1” 的字符串英寸我可以在不使用grep -v -e的情况下替换/反转匹配剩余部分,即“c:d”和“s:sad”。

例如继续,演示输出替换保持与 “[TAG]”:

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

的[^模式]或(?!模式)招失败和grep与-e -v选项这里不允许。

谢谢!

+3

你可以写另一个正则表达式捕获的其他字符串,即'[^ A]:[^,] +,?' – pzelasko

+0

随着PCRE/Perl中,你可以使用['一个:[^, ] +,?(* SKIP)(* F)|(?:?!(一个:[^,] +,?))+'](https://regex101.com/r/xE4iU6/1)。 –

回答

1

表达

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

将取代

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

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

但我不知道我理解你对(?!模式)工作不评论。我正在测试https://regex101.com/

+0

谢谢!我将模式直接放入(?!)中,并且不起作用。看来我需要更仔细地对模式进行分组。 – yfyang