我有这个字符串:
Test 123 ${tag1} lorem ipsum ${tag2} ${tag3; tag4} ${tag5; tag6} dixit lorem ${tag7} dixit lorem ${tag8}.
我想使用一个正则表达式来仅选择$ {tag;标签}。
我尝试过:
\$\{(.*?)(; )(.*?)}
但无法达到我的期望。 有什么建议吗? 谢谢
答案 0 :(得分:2)
如果${...;...}
中的内部文本不能包含{
,}
和;
,请使用否定的字符类解决方案:
\$\{([^;{}]*);\s*([^{};]*)}
请参见regex demo。
如果计划仅匹配单词char,则可以将其简化为
\$\{(\w+)\s*;\s*(\w+)}
详细信息
\$\{
-一个${
子字符串([^;{}]*)
-第1组:除;
,{
和}
以外的任何0+个字符((\w+)
将匹配1个或多个单词字符,字母,数字,下划线)\s*;\s*
-一个;
包含0+空格([^;{}]*)
-组2:除;
,{
和}
以外的0个以上的字符}
-一个}
字符。String s = "Test 123 ${tag1} lorem ipsum ${tag2} ${tag3; tag4} ${tag5; tag6} dixit lorem ${tag7} dixit lorem ${tag8}.";
Pattern pattern = Pattern.compile("\\$\\{(\\w+)\\s*;\\s*(\\w+)}");
Matcher matcher = pattern.matcher(s);
while (matcher.find()){
System.out.println(matcher.group());
System.out.println(matcher.group(1));
System.out.println(matcher.group(2));
System.out.println("=== END OF MATCH ===");
}
输出:
${tag3; tag4}
tag3
tag4
=== END OF MATCH ===
${tag5; tag6}
tag5
tag6
=== END OF MATCH ===