在geany中查找替换命名组regexp

HMR*_*HMR 10 regex geany

我试图将公共方法替换为具有注释的方法的受保护方法.

这是因为我使用phpunit测试其中的一些方法,但它们确实不需要公开,所以我想在生产服务器上切换它们并在测试时切换回来.

这是方法声明:

public function extractFile($fileName){ //TODO: change to protected
Run Code Online (Sandbox Code Playgroud)

这是正则表达式:

(?<ws>^\s+)(?<pb>public)(?<fn>[^/\n]+)(?<cm>//TODO: change to protected)
Run Code Online (Sandbox Code Playgroud)

如果我用以下代替:

\1protected\3\//TODO: change back to public for testing
Run Code Online (Sandbox Code Playgroud)

它似乎工作,但我无法工作的是命名替换.我必须使用\ 1来获得第一组.如果在替换文本中无法访问组,为什么要命名组?试过像\,$ ws,\ $ ws这样的东西,但这不起作用.

我的问题是:如果我想用命名组替换\ 1,替换文本是什么?

rob*_*CTS 9

?<ws>命名的基团的语法相同由.NET/Perl的使用.对于那些正则表达式引擎,命名组的替换字符串引用是${ws}.这意味着您的替换字符串将是:

${ws}protected${fn}\//TODO: change back to public for testing

\k<ws>通过m.buettner提及的参考文献仅用于在实际的正则表达式反向引用.

额外信息:

似乎geany也允许使用Python样式命名组:

  • ?P<ws> 是捕获语法
  • \g<ws> 是替换字符串语法
  • (?P=ws) 是正则表达式反向引用语法

编辑:

看起来我希望解决方案没有成功.从手册,

"子模式可以用以下三种方式之一命名:(?...)或(?'name'...),如在Perl中,或者(?P ...),如在Python中一样.参考从其他方法捕获括号模式的一部分,例如反向引用,递归和条件,可以通过名称和数字来进行."

进一步向下:

"返回对命名子模式的引用使用Perl语法\ k或\ k'name'或Python语法(?P = name)."

" 按名称引用的模式可能会出现在引用之前或之后的模式中."

因此,我推断使用命名组的语法是正确的.不幸的是,它们只能用于匹配模式.这回答了你的问题"为什么要命名群组......?".

这有多愚蠢?如果您在匹配模式中实现命名组及其用法时遇到了麻烦,为什么不在替换字符串中实现用法呢?

  • @HMR我知道这是一个老问题,但我使用 `(?&lt;1&gt;PATTERN)` 作为搜索字符串,使用 `\1` 作为替换字符串在 Geany 上工作。也许你应该使用 \ws... (2认同)
  • @Alex--你似乎错过了问题的全部内容.我们_know_`(?<1> PATTERN)` - >`\ 1`有效.``(?<2> PATTERN)` - >`\ 1`和`(?<ws> PATTERN)` - >`\ 1`.但是`(?<2> PATTERN)` - >`\ 2`不会.也不会`(?<ws> PATTERN)` - >`\ ws`.(既然你有Geany,你可能应该尝试`(?<ws> PATTERN)` - >`\ ws` _before_张贴建议;-)).`(?<`**anything**`> PATTERN)`,其中**任何**是一个字符串,意味着一个_named_捕获组,名称**任何**(例如,"1").`\n`,其中**n**是数字,表示第n个捕获组.`\ ws`的字面意思是"\ ws". (2认同)