我花了一些时间寻找答案,但我找不到答案,所以,这就是问题所在:
我收到此错误:
StandardWrapperValve[jsp]: Servlet.service() for servlet jsp threw
exceptionjava.lang.IllegalStateException: No match found
at java.util.regex.Matcher.group(Matcher.java:536)
at extra.regex.checkRegex(regex.java:21)
这是代码
public class regex {
public static String checkRegex(String check, String regex)
{
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(check);
m.matches();
return m.group(1);
}
}
我用这个来呼叫checkRegex()
:
String query = request.getQueryString();//this query looks like "sel=45"
String regulex = "#^(.+)#"; //even this guy returns no matches
//out.println(query); //it is is not null
String result = regex.checkRegex(query, regulex);
out.println(result);
我在这里看到了一些问题,但所有问题都归结为m.matches()
或m.find()
,但我已经三次检查了。
答案 0 :(得分:3)
你应该在m.group()
块中使用if
:
if(m.matches()) {
return m.group(1);
} else {
return null;
}
答案 1 :(得分:0)
此正则表达式
String regulex = "^#(.+)#";
将匹配
String query = "#sel=45#";
这种组合没有意义#^
。 ^
表示字符串的开头,没有任何内容可以在它之前。如果query
不包含#
,则与regulex
不匹配。
答案 2 :(得分:0)
让我们分解你的模式:
var findDate = new Date();
var displayModule = new Date("August 2,2015"); //SET STARTING DATE YOU WANT MODULES DISPLAYED
var hideModule = new Date("January 4,2016"); //SET ENDING DATE YOU WANT MODULES REMOVED
if(findDate > displayModule && findDate < hideModule) {
} else {
$("#InvalidLineup").remove();
$("#IRviolations").remove();
}
"#^(.+)#"
- 文字字符串#^
- 任何字符(可能与行终止符匹配,也可能不匹配)1次或多次(.+)
- 文字字符串那么为什么#
无法匹配? sel=45
不以String
开头,也不以"#^"
结尾。
您似乎想要在"#"
之间捕获可能存在或不存在的数据(您需要澄清这一点)。以下模式实现了:
"#"
这将匹配"#?([^#]+)#?"
并匹配sel=45
示例:
#sel=45#
结果:
public static void main(String[] args) throws Exception {
String regulex = "#?([^#]+)#?"; //even this guy returns no matches
System.out.println(checkRegex("#sel=45#", regulex));
System.out.println(checkRegex("sel=45", regulex));
}
public static String checkRegex(String check, String regex) {
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(check);
return m.matches() ? m.group(1): null;
}