regex - 匹配 n 次后使用正则表达式反向引用
问题描述
我需要匹配木偶定义中的几个字符串:
sysctl::conf { 'net.ipv4.neigh.default.gc_thresh1': value => '4096' }
sysctl::conf { 'net.ipv4.neigh.default.gc_thresh2': value => '8192' }
sysctl::conf { 'net.ipv4.neigh.default.gc_thresh3': value => '16384' }
sysctl::conf { 'net.ipv6.conf.all.disable_ipv6': value => '0' }
sysctl::conf { 'net.ipv6.conf.default.disable_ipv6': value => '0' }
然后使用反向引用添加相同的行加上另外一行以像这样结束:
sysctl::conf { 'net.ipv4.neigh.default.gc_thresh1': value => '4096' }
sysctl::conf { 'net.ipv4.neigh.default.gc_thresh2': value => '8192' }
sysctl::conf { 'net.ipv4.neigh.default.gc_thresh3': value => '16384' }
sysctl::conf { 'net.ipv6.conf.all.disable_ipv6': value => '0' }
sysctl::conf { 'net.ipv6.conf.default.disable_ipv6': value => '0' }
sysctl::conf { 'net.ipv4.tcp_mtu_probing': value => '1' }
我已经尝试过这种匹配模式( sysctl::conf \{.*\}\n{1,})
,然后将其替换为\1\n sysctl::conf { 'net.ipv4.tcp_mtu_probing': value => '1' }
问题是反向引用是引用每一行而不是所有分组块以在末尾添加我的新行。这是我得到的,而不是期望的结果:
sysctl::conf { 'net.ipv4.neigh.default.gc_thresh1': value => '4096' }
sysctl::conf { 'net.ipv4.tcp_mtu_probing': value => '1' }
sysctl::conf { 'net.ipv4.neigh.default.gc_thresh2': value => '8192' }
sysctl::conf { 'net.ipv4.tcp_mtu_probing': value => '1' }
sysctl::conf { 'net.ipv4.neigh.default.gc_thresh3': value => '16384' }
sysctl::conf { 'net.ipv4.tcp_mtu_probing': value => '1' }
sysctl::conf { 'net.ipv6.conf.all.disable_ipv6': value => '0' }
sysctl::conf { 'net.ipv4.tcp_mtu_probing': value => '1' }
sysctl::conf { 'net.ipv6.conf.default.disable_ipv6': value => '0' }
sysctl::conf { 'net.ipv4.tcp_mtu_probing': value => '1' }
我应该尝试将整个行块匹配为一个模式而不是同一模式的多个匹配吗?
我这样做是因为我正在使用 Atom 搜索和替换sysctl::conf
多个文件中的所有条目,这些条目不相同,并在已经存在的条目之后添加新条目。
谢谢 :)
PS:已经知道在 atom 中反向引用被称为 $1 而不是 \1。
解决方案
你可以试试这个模式
(?:\s*sysctl::conf \{.*\})+
之后替换为
\0\n sysctl::conf { 'net.ipv4.tcp_mtu_probing': value => '1' }
注意\0
, 因为没有任何捕获组。
解释:
?:
是一个非捕获组,用于捕获孔块(即\0
)。\s*
匹配任何空白字符(等于 [\r\n\t\f\v ])。+
最后捕获所有匹配项。
推荐阅读
- javascript - 表单动作参数中 PK 的 Django 替代方案
- reactjs - 在 Firestore 中构建数据并引用用户
- python - 如何使用 Python 从离散数据计算连续 PDF?
- python - 查找熊猫系列中所有数据类型的最快方法?
- swift - GKState:为什么 self.stateMachine == nil?
- php - 问题推送数组中的元素。(array_push)
- ruby-on-rails - 已定义方法的控制器中的 NoMethodError
- excel - 使用 VBA 将日期列格式化为文本 - 问题
- powershell - NTFS 权限
- javascript - Express 在 6 个请求后不接受 post 请求