You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PCRE兼容的grep正则匹配foo()函数的所有单引号字符串参数?

用grep(PCRE)匹配foo()函数的所有单引号字符串参数

问题说明

需要提取所有传递给foo()函数的单引号字符串参数,现有正则仅能匹配每个函数调用中的最后一个参数,需修改为可匹配全部目标内容的PCRE正则。

解决方案

使用带PCRE支持的grep命令,搭配以下正则表达式:

grep -P -o "(?<=(?:foo\(|,)\s*')([^']*)(?='\s*(?:,|\)))" 目标文件名

正则解析

  • (?<=(?:foo\(|,)\s*'):正向后顾断言,确保当前匹配的内容前是foo(起始或者参数分隔符逗号,且后续跟着任意空格和单引号
  • ([^']*):捕获单引号内的所有非单引号字符,即我们需要的参数内容
  • (?='\s*(?:,|\))):正向前瞻断言,确保当前匹配的内容后是单引号,跟着任意空格,然后是参数分隔符逗号或函数结束的右括号

示例验证

对以下调用的匹配结果符合预期:

  • foo('Alice') → 输出:Alice
  • foo('Alice', 'Bob', 'Charlie') → 输出三行:Alice、Bob、Charlie
  • foo(flag ? 'Alice' : 'Bob') → 输出两行:Alice、Bob

原正则问题分析

原正则foo\([^\)]*\K(?:')([^'\)]*)(?:'\))中,[^\)]*是贪婪匹配,会直接匹配到foo()内接近右括号的位置,导致仅能捕获最后一个单引号字符串,无法覆盖所有参数。

内容的提问来源于stack exchange,提问作者Martin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 12:48:21