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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© cat73 黑马帝   /  2014-11-23 06:40  /  4312 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1黑马币
本帖最后由 cat73 于 2014-11-23 20:52 编辑

之前提过类似的问题, 虽然答案解决了当时的例子问题, 但是并不是我想要的答案, 也许是当时例子问题不大好吧...
问题如下:
假如有这么一个文件 内容如下:
  1. head_fioawfhiowfw
  2. oifhwoefhew
  3. head_ewfjwfpwoejfow
  4. wefhweofwe
  5. headewfoiwefhwf
  6. hed_efwohewof
  7. 23423y892r2f3982
  8. head_hc89ch93f
  9. weh38f9343g4
复制代码

我想用正则表达式匹配所有非 head_ 开头的行, 应该如何写正则呢?
求大神赐教喵~~


最佳答案

查看完整内容

“?!head_” 不知道对不对

13 个回复

倒序浏览
“?!head_” 不知道对不对

点评

^(?!head_).+$  发表于 2015-5-3 11:14
回复 使用道具 举报
[^h][^e][^a][^d][^_][a-zA-Z0-9+]
回复 使用道具 举报
本帖最后由 ttbx_刘 于 2014-11-25 20:39 编辑

假定以上信息存存在当前路径下的"head_.txt"文件中。

  1. import java.io.File;
  2. import java.io.FileReader;
  3. import java.io.Reader;
  4. import java.util.ArrayList;

  5. //自定义的读取文件的类
  6. class MyReader{
  7.         private Reader reader;
  8.         MyReader(Reader r){
  9.                 this.reader=r;
  10.         }
  11.         public String readLine()throws Exception{
  12.                 String str=new String();
  13.                 int ch=0;
  14.                 while((ch=reader.read())!=-1)
  15.                 {
  16.                         if(ch=='\r') continue;                //回车,忽略
  17.                         if(ch=='\n') break;                        //回车换行,一行读取完毕
  18.                         str=str+(""+(char)ch);
  19.                 }
  20.                 if(ch==-1&&str.length()==0) return null;        //文件读取完毕,且读取字符串均已返
  21.                 return str;
  22.         }
  23. }

  24. public class test3 {
  25.         public static void main(String args[])
  26.         {
  27.                 File f=new File(".\\head_.txt");
  28.                 ArrayList<String> list=new ArrayList<String>();
  29.                 String line="";
  30.                 String reg="^(?!head_)\\w+[        DISCUZ_CODE_0        ]quot;;                //匹配规则

  31.                 try {
  32.                         MyReader mf=new MyReader(new FileReader(f));        //从head_.txt中读取信息
  33.                         while((line=mf.readLine())!=null){
  34.                                 list.add(line);          //将文件中的信息读取到list中
  35.                         }

  36.                         for(String str:list)
  37.                         {
  38.                                 if(str.matches(reg)==true)                //遍历list找出满足匹配条件的元素
  39.                                 {
  40.                                         System.out.println(str);        //打印出匹配到的元素
  41.                                 }
  42.                         }
  43.                 }catch(Exception e) {
  44.                         e.printStackTrace();
  45.                 }
  46.         }
  47. }
复制代码



回复 使用道具 举报
应该是这样的:
(?m)(^(?!head).+)
说明:
?m表示匹配模式为:^和$边界符号匹配字符串行首位。
^(?!head).+表示不匹配以head开头的字符串
回复 使用道具 举报
cat73 黑马帝 2014-11-28 09:43:41
地板
juexinshi 发表于 2014-11-27 20:54
应该是这样的:
(?m)(^(?!head).+)
说明:

好复杂- - 估计需要些时间来消化- -
回复 使用道具 举报
use        split()
回复 使用道具 举报
('/[\.\?!]+_[\.:]/)这样匹配
回复 使用道具 举报
^(?!head).+这个是
回复 使用道具 举报
Mr.陈 中级黑马 2014-12-12 22:56:43
10#
本帖最后由 Mr.陈 于 2014-12-12 22:59 编辑

String regex="[h][e][a][d][_](.)*";
你试试 利用String.matches(regex);

1.png (102.85 KB, 下载次数: 26)

1.png

2.png (122.57 KB, 下载次数: 27)

2.png
回复 使用道具 举报
^(_head).*$
回复 使用道具 举报
^(?!head).+$
回复 使用道具 举报
本帖最后由 cly成子 于 2015-1-28 21:24 编辑

类似的问题我是这样解决的,使用正则表达式中Str.matchs(regEx)这个方法,正则表达式regEx中注意当需要匹配连续字符时,在这个需要连续重复匹配的字符前加上(.),我做的一个例子如下,希望可以是解决此问题 的!
  1. ublic class test9
  2. {
  3.         //定义一个主函数
  4.         public static void main(String[] args)
  5.         {
  6.                 //调用已经定义的方法,并输出结果
  7.                 regTel();
  8.         }
  9.         //定义正则表达式的函数方法
  10.         public static void regTel()
  11.         {
  12.                 //待匹配的任意符合要求的号码
  13.                 String str = "13602199999";
  14.                 //正则表达式的表达式要求模式
  15.                 String reg = "1[3458]\\d{4}(.)[0-9]{4}";
  16.                 //输出比较后的结果(true  or  flase)
  17.                 System.out.println(str.matches(reg));
  18.         }
  19. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马