[英]How to know what this regex represents
我正在維護一些代碼,我看到一個正則表達式,如someString.matches("\\\\$\\\\{.*}")
我知道java中的反斜杠正在逃避反斜杠。 $表示行尾,{}表達式表示預期的字符串。
所以我相信(雖然現在我知道我錯了)這個正則表達式是過濾字符串末尾的點字符串並且采用這種格式: It seems to be.a.beautiful.day
但我錯了。 有人可以指點我理解這個正則表達式可以解析什么?
反斜杠字符( \\
)正在轉義美元符號( $
)和大括號( {
),因此不會將它們視為特殊字符,因此此正則表達式將匹配一個文字美元符號,后面緊跟一個大括號,后跟任意數字任何字符后面跟一個大括號( }
)。
這將匹配的一些例子:
Java編譯器接受此字符串"\\\\$\\\\{.*}"
並用單斜杠替換雙斜杠,因此regexp引擎看到:
\$\{.*}
這意味着一個字符串以美元符號$
開頭,后跟花括號中的零個或多個字符序列。
編寫類似表達式的更好方法如下:
\$\{[^}]*}
(您需要轉義Java編譯器的反斜杠)。 在看到第一個結束大括號后,此表達式將停止,並避免使用braktracking 。
"\\$\\{.*}"
對字符串進行編碼
\$\{.*}
因為Java編譯器在到達正則表達式庫之前會解釋\\\\
。
當用作正則表達式時,它匹配文字${
后跟任意數量的非換行符,直到最后一個文字}
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.