当m.find()返回true时返回false

时间:2017-02-02 12:17:59

标签: java regex

m.find()返回true时返回false。

solrQueries[i]包含字符串:

"fl=trending:0,id,business_attr,newarrivals:0,bestprice:0,score,mostviewed:0,primarySortOrder,fastselling:0,modelNumber&defType=pedismax&pf=&mm=2<70%&bgids=1524&bgboost=0.1&shards.tolerant=true&stats=true"

代码是:

Pattern p = Pattern.compile("&mm=(\\d+)&");
for(int i=0; i<solrQueries.length; i++) {
    Matcher m = p.matcher(solrQueries[i].toLowerCase());
    System.out.println(p.matcher(solrQueries[i].toLowerCase()));
    if (m.find()) {
        System.out.println(m.group(1));
        mmValues[i] = m.group(1);
    }

2 个答案:

答案 0 :(得分:1)

喔,

模式p = Pattern.compile(“(?i)&amp; mm =(\ d +)”);

现在工作正常。

谢谢你,@WiktorStribiżew

答案 1 :(得分:0)

您执行了m.find()两次(首先是System.out.println(m.find());,然后是if (m.find()))。而且由于只有一场比赛 - 即使正则表达式匹配 - 在第二轮比赛后你也什么也得不到。

使用

public String[] fetchMmValue(String[] solrQueries) {
    String[] mmValues = new String[solrQueries.length];
    Pattern p = Pattern.compile("(?i)&mm=(\\d+)");
    for(int i=0; i<solrQueries.length; i++) {
        Matcher m = p.matcher(solrQueries[i]);
        if (m.find()) {
        // System.out.println(m.group(1)); // this is just for debugging
        mmValues[i] = m.group(1);
    }
    return mmValues;
}

如果您想在&之后获取&mm=以外的所有字符,请使用其他正则表达式:

"&mm=([^&]+)"

其中[^&]+匹配除&以外的1个或多个字符。