`
sbpya
  • 浏览: 616192 次
  • 性别: Icon_minigender_1
  • 来自: 杭州,长沙
社区版块
存档分类
最新评论

正则表达式速成

阅读更多

匹配规则篇

一、句点符号:.

      句点符号匹配所有字符,包括空格、Tab字符甚至换行符;

      例:正则表达式 b.n  匹配:bon,btn,bin,bbn,bcn等等

 

二、方括号符号:[]

      方括号内指定匹配符号的范围,只能匹配单个字符;

      例:正则表达式 b[oti]n  只能匹配:bon,btn,bin

 

三、“或”符号: |

      “|”操作符的基本意义就是“或”运算

       例:  正则表达式 b(o|t|i|oo)n  除了匹配:bon,btn,bin外,还能匹配boon。圆括号()可以用来分组

 

四、连字符:-

       表示一个范围,比如:0到9,a到z   例:[0-9]{2} 表示2个0到9之间的数字

       如果一个字符的格式是:888-8888-88888,不限于8,只要是数字,是这种格式,正则表达式应该写成:

       [0-9]{3}\-[0-9]{4}\-[0-9]{5}  在这里用\进行转义,如果不转义,则会当成连字符

 

五、匹配字符数量的限制:以下符号用来表示紧靠该符号左边的符号出现的次数:

      *    0次或多次     +   1次或多次   ?   0次或1次     {n}  只能出现正好n次   {n,m}    出现次数在n到m数之间

 

六、非符号:^

    ^用在[]内表示否定的意思,不能是什么字符

    [^A][a-z]{5}  表示6个字符,第一个字符是除A以外的任何字符,第二到第六个字符必须是a到z之间的字符

 

七、圆括号和空白符号:

     第三条说过,()是分组符号,而“\s”符号是空白符号,匹配所有的空白字符,包括Tab字符

 

八、常见符号:

      \d   等同于  [0-9]

      \D   等同于 [^0-9]

      \w   等同于 [A-Z0-9]

      \W  等同于  [^A-Z0-9]

      \s    等同于 [\t\n\r\f]

      \S    等同于 [^\t\n\r\f]

 

常规应用篇

一、邮政编码:

    boolean checkPostcode(){


        Pattern p=Pattern.compile("[0-9]{6}");
        Matcher m=p.matcher(inputStr);


        if (!m.matches()){
           System.out.println("****邮政编码格式不符!*****");
           return false;
        }
        return true;
    }

 

    java.util.regex中有两个类:Pattern和Matcher,Pattern为模板,Matcher为被匹配者。

 

二、Email:

    boolean checkEmail(){


      Pattern p=Pattern.compile("[0-9A-Za-z]+@([0-9a-zA-Z]+.){1,2}(com|net|cn|com.cn)");
      Matcher m=p.matcher(inputStr);

 

      if(!m.matches()){

        System.out.println("****电子邮件格式不符!*****");

        return false;

      }

      return true;

   }

 

    注:(com|net|cn|com.cn)只允许这几种后缀的域名,如果实际应用中不限于这几种后缀域名,此处需要改动

 

三、IP地址:

    boolean ipValid(String s) {

         String regex0="(2[0-4]\\d)" + "|(25[0-5])";

         String regex1="1\\d{2}";

         String regex2="[1-9]\\d";

         String regex3="\\d ";

         String regex="("+regex0+")|("+regex1+")|("+regex2+")|("+regex3+")";

         regex="("+regex+").("+regex+").("+regex+").("+regex+")";

 

         Pattern p=Pattern.compile(regex);

         Matcher m=p.matcher(s);

         return m.matches();

    }

 

四、相关应用:

    匹配中文字符的正则表达式: [\u4e00-\u9fa5]

    匹配双字节字符(包括汉字在内):[^\x00-\xff]

 

    应用:JS中计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)

    String.prototype.len=function(){return this.replace([^\x00-\xff]/g,"aa").length;}

 

    匹配空行的正则表达式:\n[\s| ]*\r

    匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/

    匹配首尾空格的正则表达式:(^\s*)|(\s*$)

 

五、利用正则表达式限制网页表单里的文本框输入内容:注意单引号和双引号的嵌套,括号内是单引号

    只能输入中文:

    onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')"

    只能输入全角字符:

    onkeyup="value=value.replace(/[^\uFF00-\uFFFF]/g,'')"

    只能输入数字:

    onkeyup="value=value.replace(/[^\d]/g,'')"

    只能输入数字和中文:

    onkeyup="value=value.replace(/[\W]/g,'')

 

六、正则表达式在java中的相关应用:

 

    /**
  * 得到文件所在的磁盘目录
  * @param file
  * @return
  */
 public static String getFileDirectory(String file){
  String regEx = "[a-zA-z]{1,4}:.*[\\\\/]";
  String dir = "";
        Pattern p=Pattern.compile(regEx);
  Matcher m=p.matcher(file);
  if(m.find()){
   dir = m.group(m.groupCount());
  }
  return  dir;
 }
 
 /**
  * 得到文件名
  * @param file
  * @return
  */
 public static String getFileName(String file){
  String regEx =".+[\\\\|/](.+)$";
  String fileName = "";
        Pattern p=Pattern.compile(regEx);
  Matcher m=p.matcher(file);
  if(m.find()){
   fileName = m.group(m.groupCount());
  }
  return  fileName;
 }
 
 /**
  * 得到文件扩展名
  * @param file
  * @return
  */
 public static String getFileExtName(String file){
  String regEx = ".*\\.";
  Pattern p = Pattern.compile(regEx);
  Matcher m = p.matcher(file);
  String extName = m.replaceAll("");
  return extName;
 }

 

 /**
  * 得到html标签的属性
  * @param html 文件内容
  * @param label 要提取属性的标签名称,如:font ,img...
  */
 public static void getHtmlAttribute(String html,String label){
  Map<String,String> mapAttrib = new HashMap<String,String>();
  String regEx = "<"+label+"\\s*([^>]*)\\s *>";
  String regEx2 = "([a-z]+)\\s*=\\s*\"([^\"]+)\"";

  Pattern p = Pattern.compile(regEx);
  Matcher m = p.matcher(html);
  if(m.find()){
   String attribs = m.group(1);
   p = Pattern.compile(regEx2);
   m = p.matcher(attribs);
   while(m.find()){
    mapAttrib.put(m.group(1), m.group(2));
   }
  }
  printMapData(mapAttrib);
 }
 
 public static void printMapData(Map map){
  Set     entries   =   map.entrySet();
  Iterator   iter   =   entries.iterator();
  while(iter.hasNext())
  {
         Map.Entry   entry   =   (Map.Entry)iter.next();
       System.out.println(entry.getKey()+"="+entry.getValue());
  }
 }

 

 /**
  * 使用Jacob工具包完成word到html的转换
  * @param absPath 文件绝对路径
  */
 public static boolean wordFormatToHtml(String absPath) throws ProgramException{

     String FileFormat = "";
     FileFormat = getFileExtName(absPath);//文件类型

     if(FileFormat.equalsIgnoreCase("doc"))
     {
         String DocFile = absPath;
         //word文件的完整路径

         String HtmlFile = DocFile.substring(0, (DocFile.length() - 4)) + ".htm";
         //html文件的完整路径

         ActiveXComponent app = new ActiveXComponent("Word.Application");
         //启动word

         try{
           app.setProperty("Visible", new Variant(false));
           //设置word程序非可视化运行
           Dispatch docs = app.getProperty("Documents").toDispatch();
           Dispatch doc = Dispatch.invoke(docs,"Open", Dispatch.Method, new Object[]{DocFile,new Variant(false), new Variant(true)}, new int[1]).toDispatch();
           //打开word文件
           Dispatch oWordBasic = (Dispatch) Dispatch.call(app, "WordBasic").getDispatch();
          
           Dispatch.call(oWordBasic, "AcceptAllChangesInDoc");
          
           Dispatch.invoke(doc,"SaveAs",Dispatch.Method, new Object[]{HtmlFile,new Variant(8)}, new int[1]);
           //作为htm格式保存文件

           Dispatch.call(doc, "Close",new Variant(false));
           //关闭文件
         }
         catch (Exception e)
         {
    throw new ProgramException("error$Word转换为HTML时出错!");
         }
         finally
         {
           app.invoke("Quit", new Variant[] {});
           //退出word程序
         }
         //转化完毕
         return true;
     }
     return false;
   }
 
 /**
  * 逐行读取HTML文件内容
  * @param filePath  HTML文件的路径
  * @return
  * @throws ProgramException
  */
 public static String getHTMLContent(String filePath) throws ProgramException{
  StringBuffer sb=new StringBuffer();
  try{
  String line="";
  File file=new File(filePath);
  InputStreamReader read = new InputStreamReader (new FileInputStream(file));
  BufferedReader br=new BufferedReader(read);
  while((line=br.readLine())!=null){
   sb.append(line);
   sb.append('\n');//注意换行符写入
  }
  }catch(FileNotFoundException e){
   throw new ProgramException("error$读HTML文件时,文件没有找到");
  }catch(IOException e){
   throw new ProgramException("error$读HTML文件时,出现IO异常");
  }
  String temp=sb.toString();
  //不管图片
  String regEx = "<img\\s*([^>]*)\\s*>";
  Pattern p = Pattern.compile(regEx);
  Matcher m = p.matcher(temp);
  temp=m.replaceAll("");

  String regEx2 = "<v:imagedata\\s*([^>]*)\\s*>";
  Pattern p2 = Pattern.compile(regEx2);
  Matcher m2 = p2.matcher(temp);
  temp=m2.replaceAll("");
  
  temp = temp.replace("\'", "\"");
  return temp;
 }

分享到:
评论

相关推荐

    asp正则表达式速成课程[定义].pdf

    【正则表达式速成课程】是一门针对微软.NET Framework和ASP.NET的软件开发课程,主要讲解了如何使用正则表达式这一强大的文本处理工具。正则表达式能够用于验证用户输入、查找字符串中的模式以及进行复杂的文本格式...

    正则表达式教程和配套测试工具regextester

    非常棒的正则表达式速成教程,号称30分钟叫你学会正则表达式常用用法。我本人学了一下,感觉不赖,不过俺比较笨,30分钟的东西学了3个多小时,已经从什么都不会变成会编各种复杂的正则筛选条件了^^!这个教程是配合...

    30分钟学会正则表达式

    通过阅读《正则表达式参考.chm》、《正则表达式系统教程.CHM》、《正则表达式30分钟入门教程.mht》和《正则表达式.pdf》这些文档,你可以深入理解并熟练运用正则表达式。实践中不断尝试和调试,将使你的正则表达式...

    正则表达式 学习笔记 30分钟速成

    好东西才与大家分享!这是博客园一位老师的正则表达式教学笔记,很精炼的阐述,看了你一定不后悔……

    正则表达式10分钟速成指南

    正则表达式10分钟速成指南 正则表达式是计算机科学领域中的一种模式匹配语言,用于描述字符串的模式。它是由一串特殊字符组成的规则,通过这些规则可以匹配、检索和操作字符串。正则表达式的应用非常广泛,涵盖文本...

    正则表达式

    ### 正则表达式速成知识点详解 #### 一、正则表达式基础概念 正则表达式(Regular Expression)是一种强大的文本处理工具,能够帮助我们实现字符串的搜索与替换等操作。它由一系列用于匹配字符串中的字符组合的...

    正则表达式30分钟速成文档

    快速入门学习正则表达式,内容较为全面,讲解细致,新手必读

    正则表达式30分钟入门教程

    - **注意事项**:学习正则表达式需要一定的耐心,不要试图在短时间内速成,而是应该逐步理解和实践。 #### 3. 元字符 - **定义**:正则表达式中的特殊字符,具有特定的意义。 - **示例**: - `.`:匹配除换行符外...

    Python零基础速成班-第13讲-Python正则表达式Regex.ipynb

    Python零基础速成班,适用于入门或初级学习人群,采用Jupyter Notebook原装教程,.ipynb格式拷贝到Jupyter Notebook目录下即可运行,网页交互式可视化Python编程,全中文注解,下载即用,对初学者非常友好,也可作为...

    Python基于正则表达式实现文件内容替换的方法

    最近因为有一个项目需要从普通的服务器移植到SAE,而SAE的thinkphp文件结构和本地测试的有出入,需要把一些html和js的引用路径改成SAE的形式,为了不手工改,特地速成了一下Python的正则表达式和文件操作。...

    Perl PERL编程速成教程(上中下) pdf版

    3. **字符串和正则表达式**:讲解字符串操作函数和强大的正则表达式匹配功能,这是Perl处理文本的核心。 4. **文件和目录操作**:如何读写文件、追加内容、遍历目录等,这对于系统管理和自动化任务非常重要。 5. *...

    MySQL 速成课程,第二版

    使用比较、正则表达式、全文搜索等过滤数据 连接关系数据 创建和更改表 插入、更新和删除数据 利用存储过程和触发器的强大功能 使用视图和游标 管理事务处理 创建用户帐户并通过访问控制管理安全性

    Sams Teach Yourself Emacs in 24 Hours-英文版

    本书会提供一个正则表达式的速成课程,以及基础和搜索与替换的具体应用。 最后,书中还会介绍Emacs的帮助系统和配置系统,这些是学习高级Emacs使用技巧的基础。Emacs帮助系统提供了丰富的文档和指南,可以帮助用户...

    2024新版计算机编译原理期末速成全套视频教程(视频+配套资料)

    的描述与识别、有限自动机和正则表达式。在语法分析部分,介绍了上下文无关文法、文法 转换、自下而上的语法分析、LR 分析法。在语法制导翻译部分,介绍了语法制导思想和语 法制导定义。 通过本套课程的学习,你将...

    PERL编程速成教程

    - **正则表达式**:Perl中的正则表达式功能强大,支持复杂的文本匹配和替换操作。 - **匹配操作符**:`m//`和`//`操作符用于匹配正则表达式。 - **替换操作**:`s///`操作符用于在字符串中执行基于正则表达式的替换...

    21天速成Java学习指南.rar

    day01-java开发前奏 day02变量、关键字 day03 流程控制语句 day04-函数与数组 day05-day09面向对象 day10-JavaAPI day11线程 day12-day15集合 day17JDK5.0新特性与正则表达式 day18-day21.IO 附赠Java进阶知识

    资料备份-推荐C读本.zip

    8. "正则表达式30分钟入门教程-V2.33.pdf" 是关于正则表达式的速成教程,虽然不是直接与C语言相关,但正则表达式在文本处理和字符串操作中经常用到,是程序员必备的技能之一。 综上所述,这个压缩包是一个全面的...

    perl速成教程

    4. **正则表达式**:Perl的正则表达式是其强大之处,包括匹配、替换和分割等操作,以及各种元字符和修饰符的使用。 5. **文件和目录操作**:打开、关闭、读写文件,文件指针操作,目录遍历和管理。 6. **模块和...

Global site tag (gtag.js) - Google Analytics