java - 如何在java中进行URL通配符匹配?
问题描述
我正在尝试解析 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 正则表达式代码来提供帮助吗?
提前致谢。
解决方案
推荐阅读
- python - Python 从文本文件中删除行正在删除所有内容
- excel - 如何从excel vba中的命名行源中选择第一列和第三列以填充列表框
- c++ - 在文本文件中搜索名称和 ID 对,尝试/捕获异常
- javascript - 无法弄清楚为什么我的 JS 脚本不会触发
- docker - 当 Watchtower 更新 VPN Docker 容器时,它会破坏依赖它的容器
- javascript - 缓存问题?服务器端事件在本地主机中工作,而不是在生产环境中
- python - 使用 shutil.move 移动文件太慢
- javascript - 如何从 url 获取数据到 post 请求中?
- xcode - 由于“未知类型名称“VLConfig”和“未知类型名称“verloopSDK”,无法在 iOS 上运行 RN 应用程序
- javascript - 如何在反应原生的 API 上更新表中的列值?