[英]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.