我是正则表达式的菜鸟。
我有这样的字符串:-
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
.
关于java - java中的正则表达式从给定字符串中查找类似${...}的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13285821/