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)
应为空。你能帮帮我吗?
正则表达式可以适用于这两种情况。
答案 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)现在可以工作,因为我们在同一个字符串中寻找多个匹配。