簡體   English   中英

Java正則表達式在字符串外查找變量名

[英]Java regex find variable name outside a string

我想查找文件中所有出現的變量名,比如說變量test

 int test;

但是我不想在字符串中匹配變量名,例如

String s = "This is a test!";

我試過了([^\\"])([a-zA-Z_$][\\\\w$]*)([^\\"]) ,但是它不起作用。

恐怕正則表達式並非最適合您的問題。 由於解析源代碼時要考慮許多語義,因此您不太可能想出一個可靠的表達式,而不會被字符串中的轉義引號引起混淆。

解析源代碼(並可靠地檢測變量名之類的東西)的一種更好的方法是使用生成的解析器,該解析器了解要解析的文件的語法。 SableCC是為此目的而設計的,它還方便地提供了Java 1.5的語法文件

基本上它將標記給定的源代碼,並向每個標記添加類型信息。 這樣,您可以簡單地遍歷所有標記並重建源,同時替換與搜索詞匹配且類型可變的每個標記。

正如我在評論中說的那樣,通常為此使用正則表達式不是一個好主意。 您應該為此使用某種解析器。

但是無論如何,這里有一個簡單的技巧可以在某些情況下使用:

(?xm) \b test \b
(?=
    (?:[^\n"\\]+|\\.)*
    (?:(?:"(?:[^\n"\\]+|\\.)*){2})*
    $
)

Java引用:

"(?m)\\btest\\b(?=(?:[^\n"\\\\]+|\\\\.)*(?:(?:"(?:[^\n"\\\\]+|\\\\.)*){2})*$)"

一些評論和其他東西會破壞它。

暫時刪除源代碼中的所有字符串, 然后搜索變量名也許是個好主意。

假設源代碼有效(沒有語法錯誤),則可以將所有內容從第一個出現的雙引號(“)剪切到下一個雙引號。

請注意,只有一個字符的變量名(如d )將需要一些附加代碼,因為d也用於強制編譯器將前面的數字解釋為double dbl = 6d (例如double dbl = 6d )。

編輯:我假設您想構建一個應用程序或一段代碼,輕量檢查變量名。
如果您在編輯器中工作,建議您使用Netbeans或Eclipse之類的高級編輯器。
否則,如果您還想檢查語法是否正確,則需要構建自己的解釋器(或從Internet下載一些解釋器)。

暫無
暫無

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

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