【问题标题】:Regex Pattern matching for an URLURL 的正则表达式模式匹配
【发布时间】:2014-04-25 18:14:23
【问题描述】:

我有一个方法,它的输入是一个 URL 字符串。我会使用不同类型的 URL(我在下面提到的示例 5 个 URL)

String url1 = "http://domainName/contentid/controller_hscc.jsp?q=1" ;
String url2 = "http://domainName/contentid/controller.jsp?waitage=1" ;
String url3 = "http://domainName/contentid/controller_runner.jsp" ;
String url4 = "http://domainName/contentid/jump.jsp?q=5" ;
String url5 = "http://domainName/contentid/jump.jsp" ;

我需要查找此 URL 中是否包含 controller*.jsp 模式。如果是这样,我将不得不为此编写一些其他逻辑。

现在,我需要知道如何在 java 中编写* controller*.jsp 模式

我用这种方式写了一个正则表达式,它总是返回 false

boolean retVal = Pattern.matches("^(controller)*", url) ;

PS:我用的是JDK1.4

EDIT-1

我尝试了以下方式。还是不工作

import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class HelloWorld{

     public static void main(String []args){
        String url = "http://domainName/contentid/controller_hscc.jsp?q=1" ;
        //String url = "baaaaab" ;
        String regex = "/controller(\\w+)?\\.jsp*" ;

        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(url);
        System.out.println(m.matches());
     }
}

【问题讨论】:

标签: java regex


【解决方案1】:

将其与以下正则表达式匹配:

controller(\w+)?\.jsp

Demo

【讨论】:

  • @Arun,你确定。因为从我的演示中可以看出,它确实工作
  • no sashank,它不工作,你能复制粘贴我的代码并在这里测试compileonline.com/compile_java_online.php
  • @Arun,试试这个:.*?controller(\w+)?\.jsp.*?
  • @Arun,对不起,我的意思是:^.*?controller(\w+)?\.jsp.*?$
  • 在 java 中获取编译异常 .. String pattern = ".*?controller(\w+)?\.jsp.*?" ;
【解决方案2】:

试试这个代码:

import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class HelloWorld{

     public static void main(String []args){
        String url = "http://domainName/contentid/controller_hscc.jsp?q=1" ;
        //String url = "baaaaab" ;
        String regex = "^.*?controller(\\w+)?\\.jsp.*?$" ;

        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(url);
        boolean retVal = Pattern.matches(regex, url) ;
        System.out.println(m.matches() + "__" + retVal);
     }
}

【讨论】:

    【解决方案3】:
    String re = "controller.+jsp";
    String str = "http://domainName/contentid/controller_hscc.jsp?q=1";
    
    Pattern p = Pattern.compile(re);
    Matcher m = p.matcher(str);
    

    【讨论】:

      【解决方案4】:

      我发现这个工作正常:

      (controller.*\.jsp(\?.*)?)
      

      here

      作为java字符串,应该是"(controller.*\\.jsp(\\?.*)?)"

      此外,它会给你两组:整个一组和?之后的部分。

      您也可以通过将 URL 拆分为 /s 来做到这一点,取出最后一部分并检查它是否以 controller 开头 - 不使用任何正则表达式。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-08-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-31
        相关资源
        最近更新 更多