簡體   English   中英

如何知道這個正則表達式代表什么

[英]How to know what this regex represents

我正在維護一些代碼,我看到一個正則表達式,如someString.matches("\\\\$\\\\{.*}")
我知道java中的反斜杠正在逃避反斜杠。 $表示行尾,{}表達式表示預期的字符串。
所以我相信(雖然現在我知道我錯了)這個正則表達式是過濾字符串末尾的點字符串並且采用這種格式: It seems to be.a.beautiful.day但我錯了。 有人可以指點我理解這個正則表達式可以解析什么?

反斜杠字符( \\ )正在轉義美元符號( $ )和大括號( { ),因此不會將它們視為特殊字符,因此此正則表達式將匹配一個文字美元符號,后面緊跟一個大括號,后跟任意數字任何字符后面跟一個大括號( } )。

這將匹配的一些例子:

  • $ {} 9.00
  • $ {}
  • $ {{{{{{{{{{{{{{{{{{{{{{{}
  • $ {}}}}}}}}}}}}}}}}}}}}}}}

Java編譯器接受此字符串"\\\\$\\\\{.*}"並用單斜杠替換雙斜杠,因此regexp引擎看到:

\$\{.*}

這意味着一個字符串以美元符號$開頭,后跟花括號中的零個或多個字符序列。

編寫類似表達式的更好方法如下:

\$\{[^}]*}

(您需要轉義Java編譯器的反斜杠)。 在看到第一個結束大括號后,此表達式將停止,並避免使用braktracking

"\\$\\{.*}"

對字符串進行編碼

\$\{.*}

因為Java編譯器在到達正則表達式庫之前會解釋\\\\

當用作正則表達式時,它匹配文字${后跟任意數量的非換行符,直到最后一個文字}

暫無
暫無

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

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