使用JAVA

时间:2015-06-30 17:37:16

标签: java regex

我正在尝试生成可用于使用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

我知道我非常接近但无法弄清楚问题 - 任何人都可以帮忙!!

2 个答案:

答案 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) );
        }
    }
}