如何使用Java的正则表达式查找符合条件的字符串?
我要在一个文本文件里查找“com/7655/zh-cn/preview/fce7a93a77f42dd754dcf9d81f115cb8/preview”这种字符串,就是...
我要在一个文本文件里查找“com/7655/zh-cn/preview/fce7a93a77f42dd754dcf9d81f115cb8/preview”这种字符串,就是以“com/7655/zh-cn/preview/”为开始、以“preview”为结束的字符串(如果查到多个搜索结果,则以最后一个为准)。
如果看不懂的话,我给出一个测试好了:
输入测试数据“com/7655/zh-cn/preview/11111111111/preview
com/7655/zh-cn/preview/22222222222222222222222222222222222222/preview
com/7655/zh-cn/preview/49785790f0aba048e55a0289f377edb4/preview”,程序应该返回的是“com/7655/zh-cn/preview/49785790f0aba048e55a0289f377edb4/preview”,而不是其他东西。
我之所以这样测试,是因为“11111111111”“22222222222222222222222222222222222222”这两个字符串一个是比“49785790f0aba048e55a0289f377edb4”短的,一个是比“49785790f0aba048e55a0289f377edb4”长的。
也就是说另一个要求是:要返回的字符串是有着特定长度的,永远都是跟“com/7655/zh-cn/preview/49785790f0aba048e55a0289f377edb4/preview”和“com/7655/zh-cn/preview/fce7a93a77f42dd754dcf9d81f115cb8/preview”有着相同的长度!! 展开
如果看不懂的话,我给出一个测试好了:
输入测试数据“com/7655/zh-cn/preview/11111111111/preview
com/7655/zh-cn/preview/22222222222222222222222222222222222222/preview
com/7655/zh-cn/preview/49785790f0aba048e55a0289f377edb4/preview”,程序应该返回的是“com/7655/zh-cn/preview/49785790f0aba048e55a0289f377edb4/preview”,而不是其他东西。
我之所以这样测试,是因为“11111111111”“22222222222222222222222222222222222222”这两个字符串一个是比“49785790f0aba048e55a0289f377edb4”短的,一个是比“49785790f0aba048e55a0289f377edb4”长的。
也就是说另一个要求是:要返回的字符串是有着特定长度的,永远都是跟“com/7655/zh-cn/preview/49785790f0aba048e55a0289f377edb4/preview”和“com/7655/zh-cn/preview/fce7a93a77f42dd754dcf9d81f115cb8/preview”有着相同的长度!! 展开
3个回答
展开全部
import java.util.regex.*;
public class RegexTest {
private static String ONE = "49785790f0aba048e55a0289f377edb4";
private static String PATTERN = "(com/7655/zh-cn/preview/)(\\w{" + ONE.length() + "})(/preview)";
public static void main(String [] args) {
String dist = null;
Pattern p = Pattern.compile(RegexTest.PATTERN);
String input =
"com/7655/zh-cn/preview/11111111111/preview" +
"com/7655/zh-cn/preview/22222222222222222222222222222222222222/preview" +
"com/7655/zh-cn/preview/49785790f0aba048e55a0289f377edb4/preview";
Matcher m = p.matcher(input);
while(m.find()) {
String g = m.group();
// System.out.println(g);
dist = g;
}
System.out.println(dist);
}
}
public class RegexTest {
private static String ONE = "49785790f0aba048e55a0289f377edb4";
private static String PATTERN = "(com/7655/zh-cn/preview/)(\\w{" + ONE.length() + "})(/preview)";
public static void main(String [] args) {
String dist = null;
Pattern p = Pattern.compile(RegexTest.PATTERN);
String input =
"com/7655/zh-cn/preview/11111111111/preview" +
"com/7655/zh-cn/preview/22222222222222222222222222222222222222/preview" +
"com/7655/zh-cn/preview/49785790f0aba048e55a0289f377edb4/preview";
Matcher m = p.matcher(input);
while(m.find()) {
String g = m.group();
// System.out.println(g);
dist = g;
}
System.out.println(dist);
}
}
展开全部
w{n},指出现正好n个可用于标识的字符。
String s = "49785790f0aba048e55a0289f377edb4";
String regex = "com/7655/zh-cn/preview/\\w{"+s.length()+"}/preview";
if(指定字串.matches(regex)) 记下匹配的串;
至于要找文件中最后一个这样的串,文件中如果是以行为分隔符的话,则每次从文件中取一行再跟正则表达式比较,如果是以空隔或其他字符分隔的话,则用StringBuffer取出整个文件的串,然后用StringTokenizer分解整个串得到一个字符串数组。
String s = "49785790f0aba048e55a0289f377edb4";
String regex = "com/7655/zh-cn/preview/\\w{"+s.length()+"}/preview";
if(指定字串.matches(regex)) 记下匹配的串;
至于要找文件中最后一个这样的串,文件中如果是以行为分隔符的话,则每次从文件中取一行再跟正则表达式比较,如果是以空隔或其他字符分隔的话,则用StringBuffer取出整个文件的串,然后用StringTokenizer分解整个串得到一个字符串数组。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2009-11-07
展开全部
import java.urilt.regex.*;
class Test{
static public void main(String[] str){
Pattern p=Pattern.compile("com/7655/zh-cn/preview/[\\p{Graph}]{32}+/preview"); //中间正好32个字符才匹配 如果需要大于32换{32,}+
Matcher m=p.matcher("com/7655/zh-cn/preview/11111111111/preview
com/7655/zh-cn/preview/22222222222222222222222222222222222222/preview
com/7655/zh-cn/preview/49785790f0aba048e55a0289f377edb4/preview");
while(m.find()){
System.out.println(m.group());
}
}
}
class Test{
static public void main(String[] str){
Pattern p=Pattern.compile("com/7655/zh-cn/preview/[\\p{Graph}]{32}+/preview"); //中间正好32个字符才匹配 如果需要大于32换{32,}+
Matcher m=p.matcher("com/7655/zh-cn/preview/11111111111/preview
com/7655/zh-cn/preview/22222222222222222222222222222222222222/preview
com/7655/zh-cn/preview/49785790f0aba048e55a0289f377edb4/preview");
while(m.find()){
System.out.println(m.group());
}
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询