簡體   English   中英

獲取函數的內容(在花括號之間)

[英]Getting content of function (Between curly braces)

我有一個帶有“ n”個復雜函數的類,如下所示:

public class Foo {
    public String getSmt(String param, Foo foo) {
        try {
            if (smtIsTrue()) {
                Thread mThread = new Thread(new Runnable(){
                    @Override
                    public void run() {
                        // Here I do something
                    }
                }).start();
            } else if (other()) {
                if (isExisted()) {
                    execute();
                }
            }
        } catch (Exception e) {
            throw new Exception(e.getMessage());
        } finally {
            doSmt();
        }
    }


    public String otherGetSmt(String param, Foo foo) {
        try {
            if (smtIsTrue()) {
                Thread mThread = new Thread(new Runnable(){
                    @Override
                    public void run() {
                        // Here I do something
                    }
                }).start();
            } else if (other()) {
                if (isExisted()) {
                    execute();
                }
            }
        } catch (Exception e) {
            throw new Exception(e.getMessage());
        } finally {
            doSmt();
        }
    }
}

我想使用Regex獲取兩個函數的內容。 你能這樣我嗎? 我試過了

(public|protected|private|static|\s) +[\w\<\>\[\], ]+\s+(\w+) *\([^\)]*\) *(\{?|[^;]) .*\{((\s|.)*)\}

但是我做得不好。

用這個。 演示

\{((\s*?.*?)*?)*\}

. 與結束線不匹配,因此無濟於事。

試試這個: [^{]*\\{([^aa]*)\\}

{(?:(?!\n{2,})[\s\S])*}

您可以簡單地執行此操作以獲取所需內容。請參閱演示。

https://regex101.com/r/rU8yP6/14

此正則表達式將起作用:

.*\(.*\)\s*\{((\s|.)*)\}

您需要獲取第二個捕獲組,即.*\\(.*\\)\\s*\\{((\\s|.)*)\\} 但是,內容將是字符串。 如果需要結構化內容,則需要使用Java解析器。 您可以查看Java編譯器樹API,或使用獨立的解析器生成器來生成Java解析器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM