layout: post
title: 正则表达式总结regex
tags:

  • regex
    categories:
  • notes
    description: 正则表达式是用于进行文本匹配的工具 [\u4e00-\u9fa5] 匹配中文汉字
    ---

总结正则表达式

http://deerchao.net/tutorials/regex/regex-1.htm 这是我学习的网站

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

正则表达式是用于进行文本匹配的工具

[\u4e00-\u9fa5] 匹配中文汉字

\d+ 一位或多位数字

\b 代表单词开头或者结尾

. 除了换行符意外的任意字符

* 指前面的内容可以重复零次或者任意次

\d 一位数字

\d{8} 必须连续重复8次的数字

\s 任意的空白符 包括空格 制表符(tab) 换行符

\w 代表字母或者数字 或_ 下划线

+ 指前面的内容可以重复一次或任意次

\d{5,12} 数字必须重复五次(最少) 最多12次

^ 匹配字符串的开始

$ 匹配字符串的结束

  转义字符(java中转义字符本身也需要\转义)

? 重复零次或者一次

{n,} 重复n次或更多次

[] 匹配中括号中的一个符号(特殊代码不会被解释成特殊含义,不用转义)

[0-9] \d

[a-z0-9A-Z] \w

反义 (字母大写)

\W 匹配任意不是字母和数字的字符

\S 匹配任意不是空白符的字符

\D 匹配任意非数字的字符

\B 匹配不是单词开头或者结束的位置

[^x] 匹配除了x以外的任意字符

[^aeiou] 匹配除了aeiou以外的任意字符

重复

* + ? {n} {n,} {n,m}

| 满足其中一种任意规则都应匹配A+B|B+C 如果满足A+B匹配正确 否则匹配是否满足B+C 大范围应该在左侧先匹配 比如 美国5位或9位邮编 \d{5}|\d{5}-\d{4} 那么只会匹配5位的邮编(以及9位邮编的前5位)

(exp) 匹配exp,并捕获文本到自动命名的组里 如 \1, \2...

(?<name>exp) 匹配exp,并捕获文本内容到名称为name的组里如 \k<name>

断言 断言assert 预计expected 实际actual

零宽断言 匹配某个位置,但匹配内容不包括自身 如\b ^ $ 都是匹配某个位置 \b匹配单词的开头或结尾 但匹配出的内容并不包括开头或者结尾 只匹配\b内容\b的位置

(?=exp) 零宽先行断言 匹配文本中的位置 这些位置的后面能匹配给定的exp后缀 但匹配内容不包括后缀

(?<=exp) 零宽后行断言 匹配文本中的位置 这些位置的前面能匹配给定的exp前缀 但匹配内容不包括前缀

负向位至指定 他只会匹配一个满足负向位置指定的内容,但不会消费任何字符

什么叫不会消费任何字符?

例如 \b\w*q[^u]\w*\b 这个会匹配后面不是u 但前面是q的单词 如 aqa aqc 但是也会匹配lraq fighting 这样 lraq,ben 等内容 因为[^u]做为匹配条件参与了匹配 并且消费了一个字符 上例修改为 \b\w*q[?!u]\w*\b 这样就能满足需求 (?!u)是不消费字符的,任然会将 \b\w*q\w*\b 作为一个整体匹配 然后在判断q(?!u) q后面是否为u 断言都是不消费任何字符的

零宽负向先行断言 (?!exp) 他只会匹配后缀exp不存在的位置 \d{3}(?!\d)匹配三位数字且第四位不能是数字

零宽负向后行断言 (?<!exp) 只会匹配前缀exp不存在的位置(?<!\d)\d{3}匹配三位数字且不能是数字开头

贪婪匹配

贪婪匹配 当正则表达式中包含能接受重复的量词 他将会匹配尽可能多的字符 如 a*b来搜索aabab 将会匹配到字符串aabab 这成为贪婪匹配

懒惰匹配 匹配尽可能少的字符 在重复标记后面加上?号来实现匹配任意数量的重复 但是再能使整个匹配成功的前提下使用最少的重复 例如 将a*b改为 a,*?b 来搜索aabad将匹配aab和ab

*? 重复任意次 但尽可能少的重复

+? 重复一次或者更多次 但尽可能少的重复

?? 重复0次或1次 但尽可能少的重复

{n,m}? 重复n到m次 但尽可能少的重复

{n,}? 重复n次以上 但尽可能少的重复

html5表单中使用正则表达式

<input type="tel" required="required" pattern="^1([3-5]|[7-8])\d{9}$" oninvalid="setCustomValidity('不是电话号码')" oninput="setCustomValidity('')"/>
<!-- oninvalid:提交的input元素的值为无效值时(这里是正则验证失败),触发oninvalid事件。oninvalid属于Form 事件。setCustomValidity() 这个是HTML5内置的JS方法,用来自定义提示信息 -->

<!-- 这样必须页面submit才有效 如果用在js异步上可以监听提交事件-->

<script type="text/javascript">
    jQuery("#registerForm").on("submit",function (event) {
        event.preventDefault();//取消提交
        jQuery.post({
            url:"UserServlet",
            data:$("#registerForm").serialize(),
            success:function (resulet) {
                if (resulet=='true') {
                    location.href="register_ok.html";
                }else{
                    jQuery("#msg").text(resulet);
                }
            },
            error:function () {
                alert("服务器忙...");
            }
        });
    });
</script>

java中使用正则表达式

String a = "123a456a789";//第一种
String regular = "\\d{3}";
boolean t = Pattern.matches(regular,a);

Pattern pattern =Pattern.compile(regular);//第二种
Matcher matcher = pattern.matcher(a);
boolean t1 = matcher.matches();

js种使用正则表达式

var a = new RegExp("^[a-zA-Z]+$");
var booleanvaluse = a.test("a");

var reg = /^[a-zA-Z]\w{5,17}$/;
var booleanvalusereg2.test(username);
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄