将此模式转换为Pattern.matches(..)的正则表达式

时间:2016-08-02 18:13:53

标签: java android regex pattern-matching

我的一些字符串可能包含一个看起来像@[alph4Num3ric-alph4Num3ric]的子字符串,在那里我将找到alpha numberic id并将其替换为映射到地图中相关键的相应文本值。

我的第一个倾向是检查我的string.contains("@["),但我想更具体

所以现在我看Pattern.matches(但不确定正则表达式和总表达式

我如何在Pattern.matches方法中对@ [...... - ....]进行正则表达式,它还必须考虑破折号。所以我不确定需要在这种语法或通配符中转义什么,或者更多。

如果这是最好的消息,我也不能100%确定。我想首先从Pattern.matches中获取一个布尔值,然后获取实际值并使用这些值修改字符串,这似乎已经足够了,但我想最小化计算。

2 个答案:

答案 0 :(得分:1)

尝试使用:

/@[(a-zA-Z0-9-)+]/

我还没试过,但希望这会有所帮助。此外,如果它返回错误,则在9和 - 之间添加反斜杠。 / @ [(A-ZA-Z0-9 - )+] /

答案 1 :(得分:1)

请试试这个,

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        String expression = "String contains @[alph4Num3ric-alph4Num3ric] as substring";

        Pattern pattern = Pattern
                .compile("\\@\\[([a-zA-Z0-9]+)-([a-zA-Z0-9]+)\\]");
        Matcher matcher = pattern.matcher(expression);
        while (matcher.find()) {
            System.out.println("matched: "+matcher.group());
            System.out.println("group1: "+matcher.group(1));
            System.out.println("group2: "+matcher.group(2));
            System.out
                    .println("after replace "+expression.replace(matcher.group(1), "customkey"));
        }
    }

}

输出:

matched: @[alph4Num3ric-alph4Num3ric]
group1: alph4Num3ric
group2: alph4Num3ric
after replace: String contains @[customkey-customkey] as substring