簡體   English   中英

m.find() 在應該返回 true 時返回 false

[英]m.find() returns false when it should return true

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);
    }

哦,

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

現在工作正常。

謝謝,@Wiktor Stribiżew

您執行了m.find()兩次(首先在System.out.println(m.find());然后在if (m.find()) )。 而且由於只有 1 場比賽 - 即使正則表達式匹配 - 在第二次運行后您將一無所獲。

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 個或多個字符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM