如何将字符串中间的字符与已知但可变大小的前缀匹配

时间:2014-09-19 03:25:36

标签: regex cfengine

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

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

1 个答案:

答案 0 :(得分:1)

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

你可以试试这个。

替换为:

$(match.1)<your char>

请参阅demo了解PCRE中的等效版本。