[英]Extract a substring between double quotes with regular expression in 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.