[英]Regex in java to find pattern like ${…} from given string
我是正則表達式的菜鳥。
我有這樣的字符串: -
String str = "sbs 01.00 sip ${dreamworks.values} print ${fwVer} to
used ${lang} en given ${model} in ${region}";
我必須提取與此類型匹配的所有模式$ {....}
喜歡: - 對於給定的str結果應該是
${dreamworks.values}
${fwVer}
${lang}
${model}
${region}
如果它發現任何重復,那么只給出一個。 對於前: -
String feed = "sip ${dreamworks.values} print ${fwVer} to ${fwVer} used
${lang} en ${lang}given ${model} in ${region}"
結果應該是: -
${dreamworks.values}
${fwVer}
${lang}
${model}
${region}
只要
這是我的答案: -
PLACEHOLDER_PATTERN = "\\$\\{\\w+\\}";
但是這個沒有給出正確的結果。 它只給出
${fwVer}
${lang}
${model}
${region}
所以請建議我正確的正則表達式。
你不是在考慮.
在這個詞之間。 \\\\w
不包括dot(.)
。
您需要將模式更改為: -
PLACEHOLDER_PATTERN = "\\$\\{.+?\\}";
dot(.)
匹配一切,這就是你想要的嗎?
另外,我在這里使用了reluctant
量詞 - .+?
所以它只匹配}
之后}
{
,因為如果你使用貪婪量詞(.+)
, dot(.)
也會匹配}
,直到它找到最后一個}
。
更新: -
要獲得唯一值,您可以使用此模式: -
"(\\$\\{[^}]+\\})(?!.*?\\1)"
它將僅匹配那些不包含相同模式的字符串的模式。
注意: -這里,我用[^}]
代替.+?
。 它將匹配除}
之外的任何字符。 所以,現在在這種情況下,你不需要一個reluctant
量詞。
\\1
用於backreferencing
,但我們需要用反斜杠轉義它,因此\\\\1
和(?!...)
用於negative look ahead
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.