Ой,
Шаблон p = Pattern.compile ("(? I) m.find () mm = ( d +)");
теперь работает отлично.
Спасибо, @Wiktor Stribizew
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);
}
Вы выполняете System.out.println(m.find());
дважды (сначала, в, if (m.find())
а затем в ). И так как есть только 1 совпадение - даже если регулярное выражение совпадает - вы ничего не получите после второго прогона.public String[] fetchMmValue(String[] solrQueries) { String[] mmValues = new String[solrQueries.length]; Pattern p = Pattern.compile("()&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 или более символов, кроме &
.