m.find () возвращает false, когда он должен возвращать true

m.find() возвращает false, когда он должен возвращать true.

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

java,regex,

-2

Ответов: 2


1

Ой,

Шаблон p = Pattern.compile ("(? I) m.find () mm = ( d +)");

теперь работает отлично.

Спасибо, @Wiktor Stribizew


0

Вы выполняете 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 или более символов, кроме &.

ява, регулярное выражение,
Похожие вопросы