资讯专栏INFORMATION COLUMN

正则表达式总结

stefan / 1044人阅读

摘要:正则表达式总结知识点总结正则表达式正则表达式为什么需要正则表达式文本的复杂处理。学习正则表达式很大程度上就是学习表达式的语法规则。捕获元素编号为零的第一个捕获是由整个正则表达式模式匹配的文本。

正则表达式总结

@(Java知识点总结)[Java, 正则表达式]

正则表达式(regular expression)

为什么需要正则表达式?

文本的复杂处理 。

正则表达式的优势和用途?

一种强大而灵活的文本处理工具;

大部分编程语言、数据库、文本编辑器、开发环境都支持正在表达式。

正则表达式定义:

正如他的名字一样是描述了一个规则,通过这个规则可以 匹配一类字符串 。

学习正则表达式很大程度上就是学习表达式的语法规则。

开发中使用正则表达式的流程:

分析所要匹配的数据,写出测试用的典型数据

在工具软件中进行匹配测试

在程序中调用通过测试的正则表达式

语法
纵向合并单元格
普通字符 字母、数字、汉字、下划线、以及没有特殊定义的标点符号,都是“普通字符”。 表达式中的普通字符,在匹配一个字符串的时候,匹配与之相同的一个字符
简单转义字符
n 代表换行符
t 制表符
代表本身
^ , $ , . , ( , { , } , ? , + , * , | , [ , ] 匹配这些字符本身
标准字符集合 (注意大小写区分,大写是相反的意思)
d 任意一个数字,0~9中的任意一个
w 任意一个字母或数字或下划线, 也就是A~Z,a~z,0~9,_中任意一个
s 包括空格、制表符、换行符等空白字符的其中任意一个
. 小数点可以匹配除了换行符的任意一个字符 如果要匹配包括“n”在内的所有字符,用[sS]
自定义字符集合 - []能够匹配方括号中的任意一个字符
[ab5@] 匹配a或b或5或@
[ ^abc ] 匹配a、b、c 之外的任意一个字符
[f-k] 匹配f~k之间的任意一个字母
[ ^A-F0-3 ] 匹配A~F,0~3之外的任意一个字符
自定义字符集合 - []能够匹配方括号中的任意一个字符
量词 (Quantifier) 修饰匹配次数的特殊符号
{n} 表达式重复n次
{m,n} 表达式至少重复m次,至多重复n次
{m,} 表达式至少重复m次
非贪婪模式:修饰匹配次数的特殊符号后加一个?,表示匹配的字符越少越好。 例如:d{3,6}? 表示:匹配3个数字
相当于{0,1},表达式匹配0次或1次
+ 相当于 {1,},表达式至少匹配一次
* {0,},表达式不出现或出现任意次
字符边界 (匹配的是位置)
^ 字符串开始的地方匹配
$ 字符串结束的地方匹配
b 匹配一个单词边界,前面的字符和后面的字符不全是w
匹配模式
IGNORECASE 忽略大小写模式 匹配是忽略大小写 默认情况下,正则表达式是要区分大小写的
SINGLELINE 单行模式 整个文本看作一个字符串,只有一个开头,一个结尾 使小数点“.”,可以匹配包含换行符(n)在内的任意字符
MULITILINE 多行模式 每行都是一个字符串,都有开头和结尾 在指定了MULTILINE之后,如果选哟仅匹配字符串开始和结束位置,可以使用A和Z
选择符和分组
| 分支结构 匹配是忽略大小写 默认情况下,正则表达式是要区分大小写的
() 捕获组 (1)在被修饰匹配次数的时候,括号中的表达式可以作为整体被修饰。 (2)取匹配结果的时候,括号中的表达式匹配到的内容可以被多带带得到。 (3)每一对括号会分配一个编号,使用()的捕获根据左括号的顺序从1开始自动编号。捕获元素编号为零的第一个捕获是由整个正则表达式模式匹配的文本。
(?:Expression) 非捕获组 一些表达式中,不得不使用(),但又不需要保存()中子表达式匹配的内容,这时可以用非捕获组来抵消使用()带来的副作用。
反向引用(nnn) - 每一对()会分配一个编号,使用()的捕获根据左括号的顺序从1开始自动编号。 - 通过反向引用,可以对分组已捕获的字符串进行引用。
预搜索 (零宽断言)
(?=exp) 断言自身出现的位置的 __后面__能匹配表达式exp
(?<=exp) 断言自身出现的位置的 __前面__能匹配表达式exp
(?!=exp) 断言此位置的__后面__不能匹配表达式exp
(? 断言此位置的__前面__不能匹配表达式exp
- 只进行子表达式的匹配,匹配内容不计入最终的匹配结果,是零宽度。 - 这个位置应该符合某个条件。判断当前位置的前后字符,是否符合指定的条件,但不匹配前后的字符。是对位置的匹配。 - 正则表达式匹配过程中,如果子表达式匹配到的是字符内容,而非位置,并被保存到最终的匹配结果中,那么就认为这个子表达式是占有字符的;如果子表达式匹配的仅仅是位置,或者匹配的内容并不保存到最终的匹配结果中,那么就认为这个子表达式是零款多带带的。占有字符还是零宽度,是针对匹配的内容是否保存到最终的陪陪结果中而言的。 例如:[a-z]+(?!d+),匹配以任意个字母开头且后面不能有数字的表达式。。
常用表达式 电话号码验证

思路:

由数字和“-”构成

电话号码为7到8位

如果电话号码中包含有区号,那么区号为三位或四位,首位是0

区号用“-”和其他部分隔开

移动电话号码为11位

11位移动电话号码的第一位和第二位为“13”,“15”,“18”

(0d{2,3}-d{7,9})(1[35789]d{9})

电子邮件地址验证

思路:

用户名:字母、数字、中划线、下划线组成。

@

网址:字母、数字组成。

小数点:.

组织域名:2-4位字母组成。

不区分大小写

[w-+@[a-z0-9A-Z]+(.[A-Za-z]{2,4}){1,2}


Java中使用正则表达式

java.util.regex包下面:

 类 Parttern:正则表达式的编译表示形式。
 类 Matcher:通过解释 Pattern 对 字符串执行匹配操作的引擎。

/**
 * 电话号码正则表达式测试
 * @author TR
 *
 */
public  class Reg {
 
  public static void main(String[] args) {
    //建立正则表达式,并启用相应模式
    //java中转为
    Pattern p = Pattern.compile("(0d{2,3}-d{7,9})|(1[35789]d{9})" );
    //匹配字符串
    Matcher m = p.matcher("010-7758258");
    boolean yesorno = m.matches();
    System.out.println(yesorno);
  }
}
/**
 * 分组
 * @author TR
 *
 */
public  class Reg {
 
  public static void main(String[] args) {
    
    Pattern p = Pattern.compile("([1-9]+)([a-z]+)");
    //该方法扫描输入的序列,查找与该模式匹配下一个序列
    Matcher m = p.matcher("23434aaa**sfsd233**23dffd" );
    
    while(m.find()){
      System.out.println(m.group());
      System.out.println(m.group(1));
      System.out.println(m.group(2));
      System.out.println("~~~~~~~~~~~~~~~~~~~~");
    }
  }
}
public class Reg {
 
  public static void main(String[] args) {
    
    
  Pattern p = Pattern.compile("[0-9]");
  //该方法扫描输入的序列,查找与该模式匹配下一个序列
  Matcher m = p.matcher("23434aaa");
  
  System.out.println(m.replaceAll("#")); //替换  #####aaa
  
  String s = "aa222bb333cc3434";
  String[] arrs = s.split("d+");  //切割
  System.out.println(Arrays.toString(arrs)); //[aa, bb, cc]
  
  }
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/76536.html

相关文章

  • 正则达式

    摘要:本文内容共正则表达式火拼系列正则表达式回溯法原理学习正则表达式,是需要懂点儿匹配原理的。正则表达式迷你书问世了让帮你生成和解析参数字符串最全正则表达式总结验证号手机号中文邮编身份证地址等是正则表达式的缩写,作用是对字符串执行模式匹配。 JS 的正则表达式 正则表达式 一种几乎可以在所有的程序设计语言里和所有的计算机平台上使用的文字处理工具。它可以用来查找特定的信息(搜索),也可以用来查...

    bang590 评论0 收藏0
  • JavaScript正则达式总结

    摘要:正则表达式一直是里比较难以掌握的点。在中创建正则的两种方式使用字面量这就是正则表达式的字面量语法,表示正则表达式的模式,为正则表达式的标志。字面量形式的正则表达式一般使用较多,也推荐大家尽可能使用这种形式,简洁易读,符合正常的使用习惯。 正则表达式一直是js里比较难以掌握的点。 看不懂,学不会,记不住。 每次需要用到正则的时候,都需要再去查找资料。 今天花时间把正则的知识点总结下,希望...

    big_cat 评论0 收藏0
  • Nginx 学习总结(3)—— Location 模块

    摘要:改为后,显示出文件的大概大小,单位是或者或者默认为,显示的文件时间为时间。 这是 Nginx 学习总结的第三篇,上一篇介绍到了 Nginx 学习总结(2) —— 基本配置,这一篇会对Location 模块 做一些总结。我们知道,Location 模块 主要是用于针对某些特定的 URL 进行配置,可以由前缀字符串定义,也可以由正则表达式定义。 Location 匹配规则 location...

    biaoxiaoduan 评论0 收藏0
  • 正则达式难记点总结

    摘要:正则表达式匹配但是不是使用正则表达式的方法提供了不少使用正则表达式的方法。当正则表达式包含子表达式且不包含全局标志时,二者返回相同的数组。示例当正则表达式带有全局标志时,二者表现不一致。 一路以来遇到正则表达式的地方都是直接去百度的,因为感觉大部分遇到的正则表达式的地方都是很常见的。这次顺便总结下正则表达式比较难记的部分,方便自己日后查阅吧( ̄. ̄) 正则表达式中的特殊字符 感觉MDN...

    刘永祥 评论0 收藏0
  • javascript正则达式总结

    摘要:如果你知道正则表达式模式将会改变,或者你事先不知道什么模式,而是从另一个来源获取,如用户输入,这些情况都可以使用构造函数。 为什么要使用正则表达式 正则表达式通过由普通字符和特殊字符组成的文字模板完成对字符串的校验,搜索,替换。在javascript中类似这样 /^1d{10}$/ 上面的这个简单的正则用来匹配手机号至于说正则表达式到底有什么意义,借由《精通正则表达式》里面的一句话来概...

    impig33 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<