Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中的正则表达式从给定字符串中查找类似${…}的模式_Java_Regex - Fatal编程技术网

java中的正则表达式从给定字符串中查找类似${…}的模式

java中的正则表达式从给定字符串中查找类似${…}的模式,java,regex,Java,Regex,我是雷杰克斯的不速之客 我有这样的字符串:- String str = "sbs 01.00 sip ${dreamworks.values} print ${fwVer} to used ${lang} en given ${model} in ${region}"; 及 我必须提取与此类型${…}匹配的所有模式 例如:-对于给定的str,结果应为 ${dreamworks.values} ${fwVer} ${lang} ${model} ${reg

我是雷杰克斯的不速之客

我有这样的字符串:-

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不包括
点(.)

您需要将模式更改为:-

PLACEHOLDER_PATTERN = "\\$\\{.+?\\}";
dot(.)
匹配所有内容,这就是您想要的,对吗

另外,我在这里使用了
不情愿的
量词-
+?
,这样它只匹配
{
之后的第一个
}
,因为如果你使用贪婪的量词
(.+)
点(.)
也会匹配
}/code>,直到找到最后一个


更新:-

要仅获取唯一值,可以使用以下模式:-

"(\\$\\{[^}]+\\})(?!.*?\\1)"
它将只匹配那些模式,后面不跟包含相同模式的字符串

注意:-在这里,我使用了
[^}]
来代替
。它将匹配除
}
以外的任何字符。因此,在本例中,您不需要
不情愿的
量词


\1
用于
反向引用
,但我们需要用反斜杠将其转义,因此
\\1
(?!…)
用于
负向前瞻
也就是说,因为
不包括在
\w
中。您需要创建自己的,然后添加到那里

PLACEHOLDER_PATTERN = "\\$\\{[\\w.]+\\}";
看看这个模式

但是,这并不能解决问题,即您不需要重复,但这不是正则表达式的工作


如果在花括号之间可以有更多不同的字符,那么最好是匹配任何字符,直到结束括号。

因为“dreamworks.values”包含一个。在IT中,这是什么
字符串提要
?您能再解释一下吗?String feed=“sip${dreamworks.values}print${fwVer}to${fwVer}使用${lang}en${lang}给定${region}中的${model}”;请参阅给定示例中重复字符串馈送的另一种情况。您可以将所有匹配的字符串添加到
集合中。它将自动为您删除重复项。@user1808653。。您可以尝试更新的模式。它将为您提供唯一的值。@jlordo,而不是在字符类中。有一个点就是一个点,没有什么特别的。@stema-你说得对,谢谢你的回答,每天学习新东西:)