一个正则表达式,可以用于两个不同的字符串url

时间:2011-11-23 22:52:15

标签: java regex

public String getContextName() {
    String contextName = FacesContext.getCurrentInstance()
                         .getExternalContext().getRequestContextPath();
    String uri = "localhost/gar/garmin-first/gar_home";
    Pattern pat=Pattern.compile("/(.*?)/(.*)/");
    Matcher matcher = pat.matcher(uri);
    matcher.find();
    System.out.println("matched"+matcher.group(1)+matcher.group(2));
    if (StringUtil.isNotEmpty(contextName) && 
        contextName.contains(matcher.group(1))) {

        return matcher.group(2);
    }
    return matcher.group(1);
}

控制台中的输出将打印为group(1) = gargroup(2) = garmin-first,但我真正需要的是一个可以适用于这两种情况的正则表达式。另一种情况是:

String uri = "localhost/garmin-first/gar_home";

在这种情况下,我需要输出为group(1) = garmin-firstgroup(2)应为空。你能帮帮我吗? 正则表达式可以适用于这两种情况。

1 个答案:

答案 0 :(得分:1)

package test;

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

public class Test1
{
    public static void main(String[] args)
    {
        String[] strings = new String[]
        { "localhost/gar/garmin-first/gar_home", "localhost/garmin-first/gar_home" };
        Pattern pat = Pattern.compile("(?<=/)(.*?)(?=/)");
        for(String s : strings)
        {
            System.out.println("For: " + s);
            Matcher matcher = pat.matcher(s);
            while (matcher.find())
            {
                System.out.println(matcher.group());
            }
        }
    }
}

我巧妙地改变了正则表达式,以便我们查找被“/”包围的单词。 希望你能找到一种有用的方法来获取你需要的部分,因为我认为.group(1)和.group(2)现在可以工作,因为我们在同一个字符串中寻找多个匹配。