我试图解析一个网址,我想测试几个字符的最后一个索引,后跟一个数字值。
实施例 二手手机-奥尔巴尼-m3359_l12201
我试图确定最后一个" -m"后跟一个数值。
就像这样," used-cell-phone-albany-m3359_l12201" .contains(" m"后跟数字)
我认为需要使用正则表达式,但我不确定。
答案 0 :(得分:2)
您可以使用[a-z]\\d
这样的模式搜索a-z
之间字符旁边的任何数字,如果您愿意,可以在组中指定其他字符...
Pattern pattern = Pattern.compile("[a-z]\\d", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher("used-cell-phone-albany-m3359_l12201");
while (matcher.find()) {
int startIndex = matcher.start();
int endIndex = matcher.end();
String match = matcher.group();
System.out.println(startIndex + "-" + endIndex + " = " + match);
}
问题是,您的测试String
实际上包含两个匹配m3
和l1
以上示例将显示
23-25 = m3
29-31 = l1
更新了反馈
如果你可以保证标记(即-m
),那么它会变得更简单......
Pattern pattern = Pattern.compile("-m\\d", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher("used-cell-phone-albany-m3359_l12201");
if (matcher.find()) {
int startIndex = matcher.start();
int endIndex = matcher.end();
String match = matcher.group();
System.out.println(startIndex + "-" + endIndex + " = " + match);
}
答案 1 :(得分:1)
在Java中,如果需要,将URL转换为String,然后运行
URLString.match("^.*m[0-9]+$").
仅当返回true时,则URL以" m"结束。接下来是一个数字。这可以通过更精确的结束模式进行细化。这个正则表达式在字符串末尾测试模式的原因是因为正则表达式中的$匹配字符串的结尾; " [0-9] +"匹配一个或多个数字的序列; " ^"匹配字符串的开头;和"。*"匹配零个或多个任意但可打印的字符,包括空格,字母,数字和标点符号。
确定最后一次" m"然后是一个数字,然后使用
URLString.match("^.+?m[0-9].*$")
这里"。+?"贪婪地匹配所有角色直到最后一个" m"。