如何使用Java的正则表达式查找符合条件的字符串?

来源:百度知道 编辑:UC知道 时间:2024/05/30 23:52:11
我要在一个文本文件里查找“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”有着相同的长度!!

w{n},指出现正好n个可用于标识的字符。
String s = "49785790f0aba048e55a0289f377edb4";
String regex = "com/7655/zh-cn/preview/\\w{"+s.length()+"}/preview";
if(指定字串.matches(regex)) 记下匹配的串;

至于要找文件中最后一个这样的串,文件中如果是以行为分隔符的话,则每次从文件中取一行再跟正则表达式比较,如果是以空隔或其他字符分隔的话,则用StringBuffer取出整个文件的串,然后用StringTokenizer分解整个串得到一个字符串数组。

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());
}
}
}

import java.util.regex.*;

public class RegexTest {
private static String ONE =