java正则表达式匹配器结果!=到记事本++;正则表达式查找结果

java正则表达式匹配器结果!=到记事本++;正则表达式查找结果,java,regex,matcher,Java,Regex,Matcher,作为java程序的一部分,我试图从网站访问日志中提取数据。日志中的每个条目都有一个url。我已成功地从每条记录中提取url 在url中,有一个我想要捕获的参数,以便我可以使用它来查询数据库。不幸的是,web开发人员似乎没有使用任何一种标准来编写参数的名称 该参数通常称为“课程id”,但我也看到了“课程id”、“课程%3DId”、“课程%253Did”等。参数名称和值的格式通常是course\u id=\2222\u 1,其中我想要的数字介于“\u”和“\u 1”之间。(即使参数名称不同,值也始终

作为java程序的一部分,我试图从网站访问日志中提取数据。日志中的每个条目都有一个url。我已成功地从每条记录中提取url

在url中,有一个我想要捕获的参数,以便我可以使用它来查询数据库。不幸的是,web开发人员似乎没有使用任何一种标准来编写参数的名称

该参数通常称为“课程id”,但我也看到了“课程id”、“课程%3DId”、“课程%253Did”等。参数名称和值的格式通常是
course\u id=\2222\u 1
,其中我想要的数字介于“\u”和“\u 1”之间。(即使参数名称不同,值也始终相同。)

因此,我的想法是使用正则表达式
/^.*course\u id[^\uu]*\uu(\d*)\u 1.*$/i
来查找和提取数字

在java中,我的代码是

    java.util.regex.Pattern courseIDPattern = java.util.regex.Pattern.compile(".*course[^i]*id[^_]*_(\\d*)_1.*", java.util.regex.Pattern.CASE_INSENSITIVE);
    java.util.regex.Matcher courseIDMatcher = courseIDPattern.matcher(_url);

    _courseID = "";

    if(courseIDMatcher.matches())
    {
        _courseID =  retrieveCourseID(courseIDMatcher.group(1));
        return;
    }
这适用于很多唱片。但是,有些记录不记录课程id,即使参数在url中。其中一个例子是记录:

/webapps/contentDetail?course_id=_223629_1&content_id=_3641164_1&rich_content_level=RICH&language=en_US&v=1&ver=4.1.2
然而,我使用notepad++使用上面的正则表达式对这个(事实上,每个)url进行正则表达式替换,该url被课程ID成功替换,这意味着正则表达式没有错误


我在java代码中做了什么错误,还是java matcher坏了?

正则表达式没有问题。可能课程id是空的。例如
course\u id=\u\u 1
将匹配,但组1为空。所有三种口味都匹配给定记录的
223629
。但是,没有Java风格…字符串中没有隐藏字符?你能尝试添加这个标志吗:Pattern.DOTALL?