簡體   English   中英

Java正則表達式獲取雙引號之間的字符

[英]Java regular expression to get characters between double quotes

我需要弄清楚一個正則表達式(模式),以便能夠在雙引號之間獲得字符。

有點難以解釋,但這是我想要的:

如果我通過上述表達式運行它:

say("ex" + "ex2", "ex3");

然后,我將能夠獲得三場比賽;

"ex", "ex2", and "ex3"

全部以自己的方式進行。

我已經嘗試過以下表達式:

Pattern.compile("\\\"(.*)\\\"");

但是我沒有給我三個不同的.group() ,而是得到了一個.group ,分別是"ex", "ex2", and "ex3"

那么,有人知道一個表達式可以給我我想要的輸出嗎?

您可以使用非貪婪方法進行此操作:

"\\\"(.*?)\\\""

從有可能的那一刻開始,不貪心地削減一個群體。 在這種情況下,從找到第二個雙引號的那一刻起。

或者例如匹配引號中的所有字符appart:

"(\\\"[^\"]*)\\\")"

[^list]意味着除了在字符中的所有字符list

此外,您可以通過省略兩次轉義來使其更具可讀性:

"[\"]([^\"]*)[\"]"

還要注意,這不適用於遞歸模式:如果要匹配的字符串是"foo "inner" bar" ,它將匹配"foo "而不是"foo "inner" bar" ,但是我想這是一種語義尋找。

編輯:

如果還允許使用轉義的雙引號,則可以在后面使用負號:

"([\"][^\"]*(?<!\\\\)[\"])"

(?<!\\\\\\\\) -未轉義(?<!\\) -表示前面的一個字符不允許使用退格鍵。

但是,這種方法的問題在於,還可以指定一個字符串:

"Foo\\"

這用於指定字符串Foo\\ (實際的退格鍵)。

一個可能的解決方案是檢查后向是否包含奇數個連續的反斜杠,但是Java不支持,因此解決方案是使匹配的內部循環更加復雜:

"([\"]([^\\\\\"]*([\\\\].)*)*[\"])"

此正則表達式未轉義為:

(["]([^\\"]*([\\].)*)*["])
  ^    ^       ^       ^
  |    |       |       \- tailing double quote
  |    |       \- if backslash, skip next character (for instance `\\`, `\"` or `\n`
  |    \- match all except double quotes and backslashes
  \-beginning double quote

參見此jdoodle ,它從stdin讀取原始字符串並輸出捕獲的組。

暫無
暫無

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

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