gpt4 book ai didi

regex - 在 Geany 中查找替换命名组正则表达式

转载 作者:行者123 更新时间:2023-12-01 17:35:36 26 4
gpt4 key购买 nike

我正在尝试将带有注释的方法的公共(public)方法替换为 protected 方法。

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

这是方法声明:

public function extractFile($fileName){ //TODO: change to protected

这是正则表达式:

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

如果我将其替换为:

\1protected\3\//TODO: change back to public for testing

它似乎有效,但我无法开始工作是将替换命名为。我必须使用\1 来获取第一组。如果您无法在替换文本中访问它们,为什么还要命名这些组呢?我尝试了诸如 、$ws、$ws 之类的东西,但这不起作用。

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

最佳答案

?<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)是正则表达式反向引用语法

编辑:

看起来我对解决方案的希望没有实现。来自 the manual ,

A subpattern can be named in one of three ways: (?...) or (?'name'...) as in Perl, or (?P...) as in Python. References to capturing parentheses from other parts of the pattern, such as backreferences, recursion, and conditions, can be made by name as well as by number.

再往下:

Back references to named subpatterns use the Perl syntax \k or \k'name' or the Python syntax (?P=name).

A subpattern that is referenced by name may appear in the pattern before or after the reference.

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

这有多蠢?如果您不辞辛苦地在匹配模式中实现命名组及其用法,为什么不在替换字符串中也实现用法呢?

关于regex - 在 Geany 中查找替换命名组正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13600916/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com