Я пытаюсь проанализировать файл robots.txt и проверить его на java. Я разместил разрешенные и запрещенные части robots.txt в списке. Я думал, что просто использование java url_string.equals () будет достаточно для сопоставления URL. Но robots.txt содержит знак доллара ($) для сопоставления, заканчивается ли URL-адрес указанным шаблоном или нет, и звездочку (*) для любого символа между строкой. Вот функция сопоставления звездочек, которую я использую: -
public boolean asteriskWildcardMatch(String str, String pattern) {
int n=str.length();
int m=pattern.length();
if (m == 0) {return (n == 0); }
boolean[][] matchLookup = new boolean[n + 1][m + 1];
for(int i = 0; i < n + 1; i++) {Arrays.fill(matchLookup[i], false);}
matchLookup[0][0] = true;
for (int j = 1; j <= m; j++) {
if (pattern.charAt(j - 1) == '*') {
matchLookup[0][j] = matchLookup[0][j - 1];
}
}
for (int i = 1; i <= n; i++){
for (int j = 1; j <= m; j++) {
if (pattern.charAt(j - 1) == '*') {
matchLookup[i][j] = matchLookup[i][j - 1] || matchLookup[i - 1][j];
}
else if (str.charAt(i - 1) == pattern.charAt(j - 1)){
matchLookup[i][j] = matchLookup[i - 1][j - 1];
}
else{ matchLookup[i][j] = false; }
}
}
return matchLookup[n][m];
}
Robots.txt: -
User-agent: *
Disallow: /search
Allow: /search/about
Allow: /search/static
Allow: /search/howsearchworks
Disallow: /sdch
Disallow: /groups
Disallow: /index.html?
Disallow: /?
Allow: /?hl=
Disallow: /?hl=*&
Allow: /?hl=*&gws_rd=ssl$
Disallow: /?hl=*&*&gws_rd=ssl
Allow: /?gws_rd=ssl$
Allow: /?pt1=true$
Disallow: /imgres
Disallow: /u/*/about
Disallow: /app/comments$
Allow: /articles/*-admin$
Disallow: /preferences
Disallow: /setprefs
Код работает хорошо. Но я запутался, когда делал функцию соответствия знака доллара для конечных паттернов. И в этой функции много ошибок. В URL может быть много звездочек. Но доллар может быть только в конце. Кто-нибудь может помочь, предложив дать какой-нибудь фрагмент кода или java код регулярного выражения?
Заранее спасибо.