如何使用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”有着相同的长度!!
展开
 我来答
aaronswon
推荐于2018-04-08 · TA获得超过3481个赞
知道大有可为答主
回答量:1863
采纳率:0%
帮助的人:1620万
展开全部
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);
}
}
imatree
2009-11-07 · TA获得超过225个赞
知道小有建树答主
回答量:194
采纳率:0%
帮助的人:143万
展开全部
w{n},指出现正好n个可用于标识的字符。
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());
}
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式