одно регулярное выражение, которое может работать для двух разных строковых URL - PullRequest
3 голосов
/ 24 ноября 2011
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) = gar и group(2) = garmin-first, но мне действительно нужно одно регулярное выражение, которое может работать в обоих случаях.Другой случай:

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

В этом случае мне нужен вывод, так как group(1) = garmin-first и group(2) должны быть оставлены пустыми.Не могли бы вы помочь мне с регулярным выражением, которое может работать в обоих случаях, пожалуйста.

1 Ответ

1 голос
/ 24 ноября 2011
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) будут работать сейчас, когда мы ищем несколько совпадений в одной строке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...