A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 孙金鑫 于 2013-5-30 19:33 编辑
  1. public class RegexDemo {

  2.         /**
  3.          *问题:: 编写程序获取已知文件的扩展名,注意: abc.txt的扩展名是txt;sdfhj.mp3.dsf.sdf.hhh.bin.txt的扩展名也是txt.
  4. */
  5.         public static void main(String[] args) {
  6.                
  7.                 show("sdfhj.mp3.dsf.sdf.hhh.bin.txt");
  8.         }
  9.         
  10.         public static void show(String str)
  11.         {

  12.                 String reg = ".*\\.([^.]*)";//问题1:求解释,[^.]代表的意思;是否跟这个正则是否一致,String reg = ".*\\.([a-zA-Z0-9]*)";为什么?
  13.                                          //问题2:为什么要用捕捉组?

  14.                 Pattern p = Pattern.compile(reg);

  15.                 Matcher m = p.matcher(str);
  16.                 while(m.find())
  17.                 {
  18.     System.out.println(m.group(1));//问题3:为什么是m.group(1),为什么是1?具体代表什么?
  19.                 }
  20.         }
  21. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 赞一个!

查看全部评分

5 个回复

倒序浏览
对应问题1:[^.]表示的意思是任意非“.”的字符。严格意义上[^.]当然和[a-zA-Z0-9]是不一样的,后一个正则只包括字母和数字不包括符号。
对应问题2:你理解了捕捉的这个组是什么,也就明白了第三个问题。([^.]*)这部分就是取得的扩展名部分。
对应问题3:Matcher类中的group(int group)方法,作用是返回在以前匹配操作期间由给定组捕获的输入子序列。其捕获组是从1开始从左到右的索引,整个正则式中只有一个组,1就是表示要取的这个组了。

整个正则来分步理解下:
“.*”——0个或多个任意字符。
“\\.”——指代真正的符号“.”。
“([^.]*)”——0个或多个任意非“.”的字符并将其封装成组。

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
无妄无涯 发表于 2013-5-28 15:31
对应问题1:[^.]表示的意思是任意非“.”的字符。严格意义上[^.]当然和[a-zA-Z0-9]是不一样的,后一个正则 ...

"."表示任意字符。

"[^.]"任意非可不可以理解成不是"."的字符。"."表示任意字符,再加个非,那怎么理解呢?
回复 使用道具 举报
孙金鑫 发表于 2013-5-28 20:26
"."表示任意字符。

"[^.]"任意非可不可以理解成不是"."的字符。"."表示任意字符,再加个非,那怎么理解 ...

在字符集“[ ]”中,“.”就表示符号本身,不是任意字符。
回复 使用道具 举报
如果帖子没有问题了,请把帖子的类型改为“已解决”
如果不会改,请看我的个性签名
回复 使用道具 举报
无妄无涯 发表于 2013-5-30 17:01
在字符集“[ ]”中,“.”就表示符号本身,不是任意字符。

受教了,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马