Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex Eclipse如何在方法声明的结束括号中搜索和替换_Regex_Eclipse_Multiline - Fatal编程技术网

Regex Eclipse如何在方法声明的结束括号中搜索和替换

Regex Eclipse如何在方法声明的结束括号中搜索和替换,regex,eclipse,multiline,Regex,Eclipse,Multiline,我认为Eclipse不支持这一点,但我希望找到我声明的每个方法的每个结束括号,并在结束之前用一行代码替换它 我试图通过正则表达式“public.*\}”或“public[.\s]*\}”查找,但找不到单个方法声明 尽管有些帖子声明Eclipse具有使用正则表达式的多行搜索和替换功能。我认为情况并非如此。 通常给出的示例仅在正则表达式知道预期换行符的位置时识别特定换行符。由于嵌套的{}的原因,这种尝试方式是不可能的。正则表达式无法处理嵌套 请尝试在每个}\s*public前面插入新行。由于嵌套{}

我认为Eclipse不支持这一点,但我希望找到我声明的每个方法的每个结束括号,并在结束之前用一行代码替换它

我试图通过正则表达式“
public.*\}
”或“
public[.\s]*\}
”查找,但找不到单个方法声明

尽管有些帖子声明Eclipse具有使用正则表达式的多行搜索和替换功能。我认为情况并非如此。

通常给出的示例仅在正则表达式知道预期换行符的位置时识别特定换行符。

由于嵌套的
{}
的原因,这种尝试方式是不可能的。正则表达式无法处理嵌套


请尝试在每个
}\s*public
前面插入新行。

由于嵌套
{}
的原因,您不可能尝试这样做。正则表达式无法处理嵌套


尝试在每个
}\s*public
前面插入新行。

这是可能的,但不适用于regexp。相反,编写一个小型Java程序并将
org.eclipse.jdt.core_3*.jar
添加到类路径中。您可以在Eclipse安装的
plugins/
文件夹中找到这个JAR

JAR包含Eclipse编译器,它有一个API将Java源代码转换为Java源代码。迭代AST,设置所有方法的区域设置,并使用AST节点添加新代码。有一些方法可以将AST转换为字符串。使用它来生成新的源代码

如果您不知道新的AST节点应该是什么样子,请将代码添加到单个方法并打印结果

另一种选择是使用它,它允许您在运行时包装方法

[编辑]请参见
org.eclipse.jdt.internal.corext.refactoring.round.surround with trycatchrefactoring中的代码

例如()

这是可能的,但不适用于regexp。相反,编写一个小型Java程序并将
org.eclipse.jdt.core_3*.jar
添加到类路径中。您可以在Eclipse安装的
plugins/
文件夹中找到这个JAR

JAR包含Eclipse编译器,它有一个API将Java源代码转换为Java源代码。迭代AST,设置所有方法的区域设置,并使用AST节点添加新代码。有一些方法可以将AST转换为字符串。使用它来生成新的源代码

如果您不知道新的AST节点应该是什么样子,请将代码添加到单个方法并打印结果

另一种选择是使用它,它允许您在运行时包装方法

[编辑]请参见
org.eclipse.jdt.internal.corext.refactoring.round.surround with trycatchrefactoring中的代码

例如()

您可以像这样匹配和替换嵌套的方括号:

搜索模式:({(?:{(?:\s |。)}?*?)(})

替换模式:$1\t//我的代码\n$2


但是,这在Eclipse中不起作用,而在Java中起作用。

您可以像这样匹配和替换嵌套的方括号:

搜索模式:({(?:{(?:\s |。)}?*?)(})

替换模式:$1\t//我的代码\n$2


但是,这在Eclipse中不起作用,而在Java中起作用。

这是一个挑战。并非所有声明都在声明之前,因此您的建议不起作用您知道,例如,如果多行在perl中工作,我们可以搜索
{.*?}
,并确保没有嵌套的{}。::我承认它是一个非简单的正则表达式,但这就是问题所在。@ilombo否。如果搜索
{.*?}
,则会得到文件中的第一个开始大括号和之后的第一个结束大括号。如果,则第一个
后面的是哪个。正则表达式无法处理嵌套。如果需要嵌套深度的概念,那么这个任务,不管看起来多么简单,都不能用正则表达式来解决
会找到原始的非嵌套括号。但你不理解,我举了一个例子,用一些巧妙的方法,也许可以构建一个正则表达式。那只是它的一小部分,而不是整个正则表达式。@ILOMABO,正如我所说。一个尊重嵌套括号(或嵌套的任何东西)的正则表达式无法构建。故事结束。思想开放:-):::其中之一,即使在这个论坛上,你也可以找到更多。这是一个挑战。不是所有声明之前都有声明,所以你的建议不会起作用。::你知道,如果多行与perl一样工作,例如,我们可以搜索
{.*?}
并确保没有嵌套的{}.:::我承认这将是一个非简单的正则表达式,但这就是问题所在。@ilombo否。如果搜索
{.*?}
您将获得文件中的第一个开始大括号以及之后的第一个结束大括号。如果
,它将是第一个
之后的大括号。Regex无法处理嵌套。如果需要嵌套深度的概念,那么该任务(无论看起来多么简单)无法用Regex解决。您是对的,
{[^{]*?}
会找到原始的非嵌套括号。但你不理解,我举了一个例子,用一些巧妙的方法,也许可以构建一个正则表达式。那只是它的一小部分,而不是整个正则表达式。@ILOMABO,正如我所说。一个尊重嵌套括号(或嵌套的任何东西)的正则表达式无法建立。故事结束。思想开放:-)::其中之一,即使在这个论坛上你也能找到more@AaronDigulla谢谢,我会研究一下。你是否知道一些工作示例,一些已经使用它来更改源代码并将代码发布到某个地方的人?是的。Eclipse中的所有重构都使用这种方法。请参阅我的edits.@Aarondigula谢谢,我会研究一下。你知道一些工作示例吗,有人已经使用它来更改源代码并将代码发布到了某个地方吗?是的。Eclipse中的所有重构都使用这种方法。请参阅我的编辑。我尝试过,但它甚至没有在“查找索引0附近的非法重复”对话框中编译: