1

更具体地说,有一行(在给定字符串中的其他行中):

sudo:x:27:foo,bar,baz
         ^---we need to match this character

前缀是已知的,可以表示为^sudo:x:\d+

问题:肯定的后向断言必须是固定大小,否则我会使用(?<=sudo:x:\d+)

问题:如何匹配那个精确的冒号(它必须是唯一匹配的字符)

游乐场:http ://regex101.com/r/gG9vW6/2

PS:对于那些好奇我为什么需要它的人:

这只是更大任务的一部分,可以表示为:将用户添加到 sudo 组(如果尚不存在)并具有以下解析器限制(它来自正在使用的软件,无法更改):

  • 只能进行替换操作,所以需要匹配任意字符
  • (matches)在替换字符串中使用正则表达式和引用在技术上是不可能的

更新

一种使用方法(matches),所以不再是问题了:-)

这是在 cfengine 中引用匹配项的方法:

$(match.N)

其中 N 是捕获组的索引。

请参阅:https ://docs.cfengine.com/docs/3.5/manuals-language-concepts-pattern-matching-and-referencing.html

4

1 回答 1

1
(?=^sudo:x:\d+:.*$)(.*):

你可以试试这个。

用。。。来代替:

$(match.1)<your char>

在 PCRE 中查看等效版本的演示

于 2014-09-19T03:28:11.370 回答