我正在尝试生成可用于使用Java和正则表达式进行处理的动态消息。我的收入价值可以只是 “$ bdate $” ,或嵌入在句子中,例如 “您的出生日期:$ bdate $”。 我想在运行时动态替换这些 $ aaa $ 值,并且无法隔离句子中的正则表达式匹配值。这是我到目前为止所拥有的......
package com.test;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Pattern;
public class TestRegex {
public static String REGEX = "\\$((?:[a-zA-Z0-9_ ]*))\\$";
public static String testString = "Summary : $summary$"
+ "Age : $age$"
+ "Location : $location$";
public static void main(String[] args) {
System.out.println("Matcher : " + Pattern.matches(REGEX, "$ABX_ 11$"));
String [] splitStrings = testString.split("\\W+"); //also tried "\\b+"
List<String> stringList = Arrays.asList(splitStrings);
for(String test : stringList) {
System.out.println("Split Word : " + test);
}
}
}
输出低于 - 它错过了前面和后面的$符号:
Matcher : true
Split Word : Summary
Split Word : summary
Split Word : Age
Split Word : age
Split Word : Location
Split Word : location
我知道我非常接近但无法弄清楚问题 - 任何人都可以帮忙!!
答案 0 :(得分:0)
您可以使用以下内容:
String pattern = "\\w+|\\$\\w+\\$";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(testString);
while (m.find( )) {
System.out.println("Found value: " + m.group(0) );
}
请参阅Ideone DEMO
答案 1 :(得分:0)
只是为了扩展@Karthik的答案并完成主题,下面的代码片段只查找与句子中的模式匹配的单词并收集它们 - 在运行时动态替换它们可能更容易。
package com.test;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class TestRegex {
public static String testString = "Summary : $summary$"
+ "Age : $age$"
+ "Location : $location$";
public static void main(String[] args) {
String pattern = "\\$\\w+\\$";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(testString);
while (m.find( )) {
System.out.println("Found value: " + m.group(0) );
}
}
}