精华内容
下载资源
问答
  • 学习HTML正则表达式

    2018-04-11 20:18:47
    HTML正则表达式编写HTML正则表达式编写HTML正则表达式编写HTML正则表达式编写
  • HTML 正则表达式

    千次阅读 2018-09-12 18:22:50
    正则表达式概述 表达式概念: 一种字符串检索模式; 表现为字符串形式的object对象; 可进行文本搜索和替换。在前端页面中一般用于表单验证; 语法:正则字面量表达方式:/正则表达式主体/修饰符(可选);...

    正则表达式概述

    1. 表达式概念
      1. 一种字符串检索模式;
      2. 表现为字符串形式的object对象;
      3. 可进行文本搜索和替换。在前端页面中一般用于表单验证;
      4. 语法:正则字面量表达方式:/正则表达式主体/修饰符(可选);
        var reg = /abc/i;
      5. 实际开发中正则表达式会配合字符串的search和replace方法来使用;

        1. search():用于检索与正则表达式相匹配的子字符串,并返回字符串的起始位置;

        2. match():用于在原字符串中匹配第一个指定字符串的信息,例如(["b", index: 8, input: "loadfsdfbfasdfa"]),如果没有则返回null

          1. 有g修饰符时,正则返回所有满足条件的字符串的集合;

        3. replace:不修改原有字符串;

    2. 修饰符
      1. 常见的修饰符有三种:i、g、m;
        1. i:忽略大小写;
        2. g:全局;
        3. m:换行匹配,对正则中的^$产生影响;
      2. 检索模式([]表示包含其中一个的值,{}代表一个词组,):
        1. 表达式模式:[abc]、[0-9]、[m|n],每个内容都代表一类值,而不是字面的意思;
          1. [abc]:包含a或者b或者c,[a][b][c]:包含abc;
          2. [0-9]:在指定字符串中检索,查找任何满足【0-9之间】规则的字符或者字符串,该模式对字母也适用,注意结束位置要大于开始位置;
          3. (m|n):任何满足以“|”分割的选项之一,注意要用小括号括起来;
        2. 元字符模式(具有特殊含义的字符称为元字符);
          1. \d:数字,等同于[0-9];
          2. \s:表示空格;
          3. \b:表示边界\0,或以空格和换行隔开的;
        3. 量词模式(检索的字符或字符串出现的次数,仅对前面的一个字符有作用);
          1. n+:一个或者多个;
          2. n*:包含0个或者多个n(对空格也会起作用,贪婪模式);
          3. n?:要么0次,要么1次;
          4. .:表示任意字符;
    3. RegExp对象:
      var reg = new RegExp(正则表达式的内容,修饰符);//参数均采用字符串的形式;
      

       

      1. 两个参数均为字符串类型;
      2. 提供的方法;
        1. test():本方法判断是否有满足正则条件的字符串,有就返回true,没有就返回false;
        2. exec():查找原字符第一个满足正则条件的下标和内容,查找失败则返回null,当RefExp是全局模式(g)时,当 exec() 找到了与表达式相匹配的文本时,在匹配后,它将把 RegExpObject 的 lastIndex 属性设置为匹配文本的最后一个字符的下一个位置。也就是说,我们可以通过反复调用 exec() 方法来遍历字符串中的所有匹配文本。当 exec() 再也找不到匹配的文本时,它将返回 null,并把 lastIndex 属性重置为 0;
          var str = 'loaB11aadbfsdfbfabsdbfa';
          var reg = new RegExp('ab','gi')
          var res = reg.exec(str)
          console.log(reg,str.match(reg))///ab/gi ["aB", "ab"]
          console.log(reg.test(str))//true
          console.log(res)//["aB", index: 2, input: "loaB11aadbfsdfbfabsdbfa"]
          res = reg.exec(str)
          console.log(res)//["ab", index: 16, input: "loaB11aadbfsdfbfabsdbfa"]

           

    4. 初末尾字符:
      1. ^:初位字符
      2. $:末尾字符
    5. 重复类:
      1. 用{}来匹配字符连续出现的次数;
      2. {n}恰好n次,{n,}至少出现n次,{n,m}至少n次,至多m次;
    6. 贪婪模式和懒惰模式
      1. 贪婪模式(少用):只要符合正则要求的就一直往下匹配(n*);
      2. 懒惰模式:一旦匹配到符合正则要求的内容,就立刻立刻结束的行为模式(n?);
    7. 脱字符
      1. 仅当出现在中括号首位时,^可以表示“不是”的意思 ;
    8. 12个常用的js正则表达式
      1. 补充中……
         
    展开全文
  • 惯用HTML正则表达式

    2017-06-13 10:10:49
    惯用HTML正则表达式
  • 这次给大家带来用正则表达式验证登录页面的输入内容,用正则表达式验证登录页面输入内容的注意事项有哪些,下面就是实战案例,一起来看一下。先给大家展示下效果图:废话不多说了,直接给大家贴代码了,具体代码如下...

    5268f80b9b1e01f982625ef6fac83ca1.png

    这次给大家带来用正则表达式验证登录页面的输入内容,用正则表达式验证登录页面输入内容的注意事项有哪些,下面就是实战案例,一起来看一下。

    先给大家展示下效果图:

    5f744837c000dc596ca701b424068cab.png

    废话不多说了,直接给大家贴代码了,具体代码如下所示:

    $(function() {

    $("input[name='uname']").blur(function() { //失去焦点

    var namestr = $(this).val();

    var regstr = /^[\u4e00-\u9fa5]{2,4}$/;

    if(!regstr.test(namestr)) {

    $(this).parent().next().html("用户名必须是2-4个汉字").css("color", "red");

    return false;

    }

    return true;

    });

    $("input[name = 'uname']").focus(function() { //获取焦点

    $(this).val("");

    $(this).parent().next().html("");

    });

    $("input[name='pwd']").blur(function() {

    var pwdstr = $(this).val();

    var regstr = /^\w{6}$/;

    if(!regstr.test(pwdstr)) {

    $(this).parent().next().html("密码必须是6位数字字母下划线").css("color", "red");

    return false;

    }

    return true;

    });

    $("input[name='pwd']").focus(function() {

    $(this).parent().next().html("");

    });

    $("input[name='birthday']").blur(function() {

    var birthdaystr = $(this).val();

    var regstr = /^(19|20)\d{2}-(1[0-2]|0?[1-9])-(3[0-1]|2[0-9]|0?[1-9])$/;

    if(!regstr.test(birthdaystr)) {

    $(this).parent().next().html("日期格式不正确").css("color", "red");

    return false;

    }

    return true;

    });

    $("input[name='birthday']").focus(function() {

    $(this).parent().next().html("");

    });

    $("input[name='email']").blur(function(){

    var emailstr = $(this).val();

    var regstr = /^[\w\-]+@[a-z0-9A-Z]+(\.[a-zA-Z]{2,3}){1,2}$/;

    if(!regstr.test(emailstr)){

    $(this).parent().next().html("邮箱格式不正确").css("color","red");

    return false;

    }

    return true;

    });

    $("input[name='email']").focus(function(){

    $(this).parent().next().html("");

    });

    });

    body {

    font-size: 12px;

    }

    #home {

    background-color: beige;

    border: solid 1px black;

    width: 550px;

    height: 185px;

    margin: auto;

    margin-top: 20px;

    }

    #head {

    height: 135px;

    }

    #foot {

    text-align: center;

    }

    .dl1 {

    clear: both;

    padding-left: 10px;

    }

    .dl1 dt {

    float: left;

    height: 30px;

    width: 80px;

    line-height: 30px;

    }

    .dl1 dd {

    float: left;

    height: 30px;

    line-height: 30px;

    /*width: 250px;*/

    }

    #btn_res {

    background-image: url(img/reset.gif);

    width: 80px;

    height: 34px;

    }

    #btn_sub {

    background-image: url(img/submit.gif);

    width: 80px;

    height: 34px;

    }

    用户名 :
    用户密码 :
    出生日期 :
    yyyy-mm-dd
    用户邮箱 :

    相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!

    推荐阅读:

    实现日期正则表达式详解

    JS正则的使用及基本语法

    展开全文
  • html 正则表达式

    2012-03-30 17:07:56
    可以在标签里就限制只能输入数字,英文。验证电话号码,生份证号码等
  •   在一次Java程序设计课程中,在课堂上了解到了正则表达式,然后自己去百度了一番,发现正则表达式应用的范围还是比较广泛的,在Python爬虫爬取数据时候,也会用上正则表达式,所以决定花点心思去学习一下正则...

    编程环境

    • windows 10

    • eclipse


    前言

      在一次Java程序设计课程中,在课堂上了解到了正则表达式,然后自己去百度了一番,发现正则表达式应用的范围还是比较广泛的,在Python爬虫爬取数据时候,也会用上正则表达式,所以决定花点心思去学习一下正则表达式。



    正则表达式语法

    • 普通字符
    正则表达式说明
    [123abc]匹配[…]括号里边的所有字符,相当于匹配1或2或3或a或b或c, 等价于[1|2|3|a|b|c]
    [^123abc]匹配除了[…]之外的所有字符,相当于匹配除了1,2,3,a,b,c之外的所有字符
    [a-z]表示一个区间,匹配小写字母
    [A-Z]表示一个区间,匹配大写字母
    [0-9]表示一个区间,匹配0到9之间的数字
    \d匹配数字,等价于[0-9]
    \D匹配非数字,等价于[^0-9]
    \w匹配字母、数字或者下划线,等价于[a-zA-z0-9_]
    \W匹配非字母、非数字或者非下划线,\W相当于匹配\w的补集字符,等价于[^a-zA-z0-9_]

    说明:\大写字母 和 \小写字母,匹配的字符内容是相反的,^代表取反的意思


    • 非打印字符
    正则表达式说明
    \cx匹配由x指明的控制字符。例如, \cM 匹配一个 control-M 或回车符。x 的值必须是26个字母
    \f匹配一个换页符
    \n匹配一个换行符
    \r匹配一个回车符
    \t匹配一个制表符
    \v匹配一个垂直制表符
    \s匹配所有的空白字符,等价于[\f\n\r\t\v]
    \S匹配所有非空白字符,等价于[^\f\n\r\t\v]

      说明:控制字符主要有LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BS(退格)、BEL(振铃)等,存在于Ascii码中的第0~31号及127号中。想了解更多关于控制字符的内容请点击这里


    • 特殊字符
    正则表达式说明
    $匹配输入字符串的结尾位置,要匹配 $ 字符本身,请使用\$。
    ( )标记一个子表达式的开始和结束位置,要匹配这些字符,请使用 \( 和 \)
    *匹配前面的子表达式零次或多次,要匹配 * 字符,请使用 \*
    +匹配前面的子表达式一次或多次,要匹配 + 字符,请使用 \+
    .匹配除换行符 \n 之外的任何单个字符,要匹配 . ,请使用 \.
    [标记一个中括号表达式的开始。要匹配 [ ,请使用 \[
    ?匹配前面的子表达式零次或一次,或指明一个非贪婪限定符,要匹配 ? 字符,请使用 ?
    \将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符
    ^匹配输入字符串的开始位置,当该符号在方括号表达式中使用时,匹配非方括号内容的字符,相当于取反,要匹配 ^ 字符本身,请使用 ^
    {标记限定符表达式的开始,要匹配 {,请使用 \{
    |指明两项之间的一个选择,相当于或,要匹配 |,请使用 \

    • 限定字符
    正则表达式说明
    {n}n 是一个非负整数,匹配确定的 n 次
    {n,}n 是一个非负整数,至少匹配n 次
    {n,m}m 和 n 均为非负整数,其中n <= m,最少匹配 n 次且最多匹配 m 次



    正则表达式的应用

    • 实例1

      我们来讲一下比较有用的例子吧,拿html的标签页来举例子,假如说我们需要匹配html中a标签下的链接

    
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    public class Debug {
    
    	public static void main(String[] args) {
    		String html = "<a class=\"regex\" href=\"https://www.baidu.com/\">正则表达式</a>";
    		String regex = "<a class=\"[a-z]+\" href=\"(.*?)\">(.*?)</a>";
            for (int i = 0; i < 3; i++) {
                String content = getContentByRegex(html, regex, i);
                System.out.println(content);
            }
    	}
        
        public static String getContentByRegex(String html, String regex, int index) {
            String content = "";	// 如果没有匹配到, 则返回空字符串
    		Pattern pattern = Pattern.compile(regex);
    		Matcher match = pattern.matcher(html);
    		if (match.find()) {
    			content = match.group(index);
    		}
    		return content;
        }
    
    }
    

      解释说明一下上面的代码,html是我们获取到的网页源代码,regex就是我们写的正则表达式规则,可以看到的是,我在href=后边使用了 .*? ,.*? 指的是匹配除了换行之外的所有字符,在这个代码里边就是匹配href后边的整个链接(ps: .*? 在写在href双引号的里边), .*? 我个人觉得是比较常用的一种,简单好用。接下来就是调用自己写的函数来返回匹配的内容,其中match.find()是必不可少的,match.group(0)或者match.group()代表的是正则表达式规则的全部内容,match.group(1)代表的是第一个括号里边的内容,match.group(2)代表的是第二个括号里边的内容,依次类推。


    代码的运行结果如下

    <a class="regex" href="https://www.baidu.com/">正则表达式</a>
    https://www.baidu.com/
    正则表达式
    

      如果我们只需要href里边的链接,我们就只需要match.group(1)就可以了。



    • 实例2

      那如果我们想匹配网页上所有a标签下的链接的话,该怎么做呢?先上代码

    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    import java.util.List;
    import java.util.ArrayList;
    
    public class Debug {
    
    	public static void main(String[] args) {
    		String html = "<a class=\"regex\" href=\"https://www.baidu.com/\">正则表达式\n</a>隔开两个a标签的内容\n<a class=\"regex\" href=\"https://blog.csdn.net/\">正则表达式\n</a>";
    		String regex = "<a class=\"[a-z]+\" href=\"(.*?)\">(.*?)</a>"; // 正则表达式规则
            List<String> content = getContentByRegex(html, regex, 1);	// 获取到的内容
    		System.out.println(content);	// 输出
    	}
        
        public static List<String> getContentByRegex(String html, String regex, int index) {
    		List<String> list = new ArrayList<>();	// 创建一个空列表
    		Pattern pattern = Pattern.compile(regex, Pattern.DOTALL);
    		Matcher match = pattern.matcher(html);
    		while (match.find()) {
    			list.add(match.group(index));
    		}
    		return list;
    	}
    
    }
    

      解释说明:因为我们需要匹配多个a标签下的链接,所以我们用列表来存储这些链接比较方便,对比上一个例子,会发现compile中多了一个Pattern.DOTALL, 原来 .*? 匹配的是除了换行之外的所有字符,使用DOTALL会把\n也当成一个普通字符,也就是说 .*? 也会匹配换行符;还有就是在getContentByRegex函数中用的是while (match.find()) 而不是if (match.find()),因为这里是有多个链接的,所有用的是while。


    代码的运行结果如下

    [https://www.baidu.com/, https://blog.csdn.net/]
    

    我们来输出一下match.group(2),输出结果如下:

    [正则表达式
    , 正则表达式
    ]
    

    会发现,也把 \n 符匹配了进去,所以输出时候文字后边会多了一个 \n ,这也就是使用DOTALL的原因,如果没有使用DOTALL则会匹配失败,返回的是空列表 [] 。



    总结

      上述就是我对正则表达式的理解,讲到的内容可能偏少,不过都是比较实用的东西。希望这篇文章会对你有帮助,如果有什么问题欢迎在评论区提出。

    展开全文
  • 1.正则表达式到底是什么东西? 正则表达式(英语:Regular Expression,在代码中常简写为regex、regexp或RE)是用于描述字符串规则的工具。换句话说,正则表达式就是记录文本规则的代码。 正则表达式语言由两种...

    1.正则表达式到底是什么东西?

    正则表达式(英语:Regular Expression,在代码中常简写为regex、regexp或RE)是用于描述字符串规则的工具。换句话说,正则表达式就是记录文本规则的代码。

    正则表达式语言由两种基本字符类型组成原义(正常)文本字符元字符(metacharacter)。元字符使正则表达式具有处理能力。所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式。

    在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。很可能你使用过Windows/Dos下用于文件查找的通配符(wildcard),也就是 * 和 ? 。如果你想查找某个目录下的所有的Word文档的话,你会搜索*.doc。在这里,*会被解释成任意的字符串。和通配符类似,正则表达式也是用来进行文本匹配的工具,只不过比起通配符,它能更精确地描述你的需求——当然,代价就是更复杂——比如你可以编写一个正则表达式,用来查找所有以0开头,后面跟着2-3个数字,然后是一个连字号“-”,最后是7或8位数字的字符串(像010-12345678或0376-7654321)。

    2.常用正则表达式符号

    (1)常用的元字符
    \b 代表着单词的开头或结尾,也就是单词的分界处。虽然通常英文的单词是由空格,标点符号或者换行来分隔的,但是\b并不匹配这些单词分隔字符中的任何一个,它只匹配一个位置。
    . 匹配除了换行符以外的任意字符。
    \d 匹配一位数字(0,或1,或2,或……)。
    \s 匹配任意的空白符,包括空格,制表符(Tab),换行符,中文全角空格等。
    \w 匹配字母或数字或下划线或汉字等。
    ^ 匹配字符串的开始。
    $ 匹配字符串的结束。有些正则表达式处理工具还有一个处理多行的选项。如果选中了这个选项,^和$的意义就变成了匹配行的开始处和结束处。

    (2)常用的限定符
    * 代表数量——指定 * 前边的内容可以连续重复使用任意次以使整个表达式得到匹配。
    .* 连在一起就意味着任意数量的不包含换行的字符。
    + 是和 * 类似的元字符,不同的是: * 匹配重复任意次(可能是0次),而+则匹配重复1次或更多次。
    ? 重复零次或一次
    {n} 重复n次
    {n,} 重复n次或更多次
    {n,m} 重复n到m次
    [] 匹配没有预定义元字符的字符集合。
    例如:
    [0-9] 代表一位数字,与\d就是完全一致的;
    [a-z0-9A-Z_] 完全等同于\w(如果只考虑英文的话)。
    [.?!] 匹配标点符号( . 或 ? 或 ! )

    (3)常用的反义代码
    \W 匹配任意不是字母,数字,下划线,汉字的字符
    \S 匹配任意不是空白符的字符
    \D 匹配任意非数字的字符
    \B 匹配不是单词开头或结束的位置
    [^x] 匹配除了x以外的任意字符
    [^aeiou] 匹配除了aeiou这几个字母以外的任意字符

    (4)常用分组语法
    捕获:
    (exp) 匹配exp,并捕获文本到自动命名的组里
    (?<name>exp) 匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name’exp)
    (?:exp) 匹配exp,不捕获匹配的文本,也不给此分组分配组号
    零宽断言:
    (?=exp) 匹配exp前面的位置
    (?<=exp) 匹配exp后面的位置
    (?!exp) 匹配后面跟的不是exp的位置
    (?<!exp) 匹配前面不是exp的位置
    注释:
    (?#comment) 这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读

    (5)懒惰限定符
    *? 重复任意次,但尽可能少重复
    +? 重复1次或更多次,但尽可能少重复
    ?? 重复0次或1次,但尽可能少重复
    {n,m}? 重复n到m次,但尽可能少重复
    {n,}? 重复n次以上,但尽可能少重复

    3.正则表达式详细介绍

    字符转义
    如果你想查找元字符本身的话,比如查找 . ,或者 * ,是没办法直接指定它们的,因为它们会被解释成别的意思。这时你就得使用 \ 来取消这些字符的特殊意义。因此,应该使用 \. 和 \* 。当然,要查找 \ 本身,得用 \\。
    例如:china\.net 匹配 china.net,C:\\Windows匹配C:\Windows。

    分枝条件
    正则表达式里的分枝条件指的是有几种规则,如果满足其中任意一种规则都应该当成匹配,匹配分枝条件时,将会从左到右地测试每个条件,如果满足了某个分枝的话,就不会去再管其它的条件了。具体方法是用 | 把不同的规则分隔开。

    我们来看一个复杂的表达式:\(?0\d{2}[) -]?\d{8}
    “(” 和 “)” 也是元字符,所以在这里需要使用转义。这个表达式可以匹配几种格式的电话号码,像(010)88886666,或022-22334455,或02912345678等。我们对它进行一些分析吧:首先是一个转义字符 \( ,它能出现0次或1次(?),然后是一个0,后面跟着2个数字(\d{2}),然后是 ) 或 - 或空格中的一个,它出现1次或不出现(?),最后是8个数字(\d{8})。

    不幸的是,刚才那个表达式也能匹配010)12345678或(022-87654321这样的“不正确”的格式。要解决这个问题,我们需要用到分枝条件。正则表达式里的分枝条件指的是有几种规则,如果满足其中任意一种规则都应该当成匹配,具体方法是用|把不同的规则分隔开。听不明白?没关系,看例子:
    0\d{2}-\d{8}|0\d{3}-\d{7} 这个表达式能匹配两种以连字号分隔的电话号码:一种是三位区号,8位本地号(如010-12345678),一种是4位区号,7位本地号(0376-2233445)。

    (0\d{2})[- ]?\d{8}|0\d{2}[- ]?\d{8} 这个表达式匹配3位区号的电话号码,其中区号可以用小括号括起来,也可以不用,区号与本地号间可以用连字号或空格间隔,也可以没有间隔。你可以试试用分枝条件把这个表达式扩展成也支持4位区号的。

    \d{5}-\d{4}|\d{5} 这个表达式用于匹配美国的邮政编码。美国邮编的规则是5位数字,或者用连字号间隔的9位数字。之所以要给出这个例子是因为它能说明一个问题:使用分枝条件时,要注意各个条件的顺序。如果你把它改成\d{5}|\d{5}-\d{4}的话,那么就只会匹配5位的邮编(以及9位邮编的前5位)。原因是匹配分枝条件时,将会从左到右地测试每个条件,如果满足了某个分枝的话,就不会去再管其它的条件了。

    分组
    我们已经提到了怎么重复单个字符(直接在字符后面加上限定符就行了);但如果想要重复多个字符又该怎么办?你可以用小括号来指定子表达式(也叫做分组),然后你就可以指定这个子表达式的重复次数了,你也可以对子表达式进行其它一些操作。例如:
    (\d{1,3}.){3}\d{1,3} 是一个简单的IP地址匹配表达式。要理解这个表达式,请按下列顺序分析它:\d{1,3}匹配1到3位的数字,(\d{1,3}.){3}匹配三位数字加上一个英文句号(这个整体也就是这个分组)重复3次,最后再加上一个一到三位的数字(\d{1,3})。
    不幸的是,它也将匹配256.300.888.999这种不可能存在的IP地址。如果能使用算术比较的话,或许能简单地解决这个问题,但是正则表达式中并不提供关于数学的任何功能,所以只能使用冗长的分组,选择,字符类来描述一个正确的IP地址:(2[0-4]\d|25[0-5]|[01]?\d\d?).){3}(2[0-4]\d|25[0-5]|[01]?\d\d?
    (PS: IP地址中每个数字都不能大于255。IP 地址里的数字可以包含有前导 0 (leading zeroes),所以01.02.03.04 这样前面带有0的数字, 是正确的IP地址。)

    反义
    有时需要查找不属于某个能简单定义的字符类的字符。比如想查找除了数字以外,其它任意字符都行的情况,这时需要用到反义。
    常用的反义正则表达式:
    \W 匹配任意不是字母,数字,下划线,汉字的字符
    \S 匹配任意不是空白符的字符
    \D 匹配任意非数字的字符
    \B 匹配不是单词开头或结束的位置
    [^x] 匹配除了x以外的任意字符
    [^aeiou] 匹配除了aeiou这几个字母以外的任意字符
    例子:\S+ 匹配不包含空白符的字符串。
    <a[^>]+> 匹配用尖括号括起来的以a开头的字符串。

    后向引用
    后向引用用于重复搜索前面某个分组匹配的文本。使用小括号指定一个子表达式后,匹配这个子表达式的文本(也就是此分组捕获的内容)可以在表达式或其它程序中作进一步的处理。默认情况下,每个分组会自动拥有一个组号,规则是:从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推。例如,\1代表分组1匹配的文本。

    请看一个较为复杂的示例:
    \b(\w+)\b\s+\1\b 可以用来匹配重复的单词,像go go, 或者kitty kitty。这个表达式首先是一个单词,也就是单词开始处和结束处之间的多于一个的字母或数字(\b(\w+)\b),这个单词会被捕获到编号为1的分组中,然后是1个或几个空白符(\s+),最后是分组1中捕获的内容,也就是前面匹配的那个单词(\1)。

    你也可以自己指定子表达式的组名。要指定一个子表达式的组名,请使用这样的语法:(?<Word>\w+)(或者把尖括号换成 ’ 也行:(?‘Word’\w+)),这样就把\w+的组名指定为Word了。要反向引用这个分组捕获的内容,你可以使用\k<Word>,所以上一个例子也可以写成这样:\b(?<Word>\w+)\b\s+\k<Word>\b。

    (?:exp) 不会改变正则表达式的处理方式,只是这样的组匹配的内容不会像前两种那样被捕获到某个组里面,也不会拥有组号。你可以使用(?:exp)这样的语法来剥夺一个分组对组号分配的参与权。

    常用的捕获正则表达式 :
    (exp) 匹配exp,并捕获文本到自动命名的组里
    (?<name>exp) 匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name’exp)
    (?:exp) 匹配exp,不捕获匹配的文本,也不给此分组分配组号

    零宽断言
    零宽断言指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。
    它用于查找在某些内容(但并不包括这些内容)之前或之后的东西,也就是说它们像\b,^,$那样用于指定一个位置,这个位置应该满足一定的条件(即断言),因此被称为零宽断言。

    下面给出几个例子:
    (?=exp) 也叫零宽度正预测先行断言,它断言自身出现的位置的后面能匹配表达式exp。比如:
    \b\w+(?=ing\b),匹配以ing结尾的单词的前面部分(除了ing以外的部分),例如查找I’m singing while you’re dancing.时,它会匹配sing和danc。
    (?<=exp) 也叫零宽度正回顾后发断言,它断言自身出现的位置的前面能匹配表达式exp。比如:
    (?<=\bre)\w+\b会匹配以re开头的单词的后半部分(除了re以外的部分),例如在查找reading a book时,它匹配ading。
    (?<=\s)\d+(?=\s) 匹配以空白符间隔的数字(再次强调,不包括这些空白符)。

    常用的零宽断言正则表达式:
    (?=exp) 匹配exp前面的位置
    (?<=exp) 匹配exp后面的位置
    (?!exp) 匹配后面跟的不是exp的位置
    (?<!exp) 匹配前面不是exp的位置

    负向零宽断言
    前面我们提到过怎么查找不是某个字符或不在某个字符类里的字符的方法(反义)。但是如果我们只是想要确保某个字符没有出现,但并不想去匹配它时怎么办?例如,如果我们想查找这样的单词–它里面出现了字母q,但是q后面跟的不是字母u,我们可以尝试这样:
    \b\w*q[^u]\w*\b 匹配包含后面不是字母u的字母q的单词。但是如果多做测试(或者你思维足够敏锐,直接就观察出来了),你会发现,如果q出现在单词的结尾的话,像Iraq,Benq,这个表达式就会出错。这是因为[^u]总要匹配一个字符,所以如果q是单词的最后一个字符的话,后面的[^u]将会匹配q后面的单词分隔符(可能是空格,或者是句号或其它的什么),后面的\w*\b将会匹配下一个单词,于是\b\w*q[^u]\w*\b就能匹配整个Iraq fighting。负向零宽断言能解决这样的问题,因为它只匹配一个位置,并不消费任何字符。

    下面给出几个例子:
    (?!exp) 零宽度负预测先行断言,断言此位置的后面不能匹配表达式exp。例如:\d{3}(?!\d) 匹配三位数字,而且这三位数字的后面不能是数字;\b((?!abc)\w)+\b 匹配不包含连续字符串abc的单词。
    (?<!exp) 零宽度负回顾后发断言,断言此位置的前面不能匹配表达式exp。例如:(?<![a-z])\d{7} 匹配前面不是小写字母的七位数字。

    一个更复杂的例子:
    (?<=<(\w+)>).*(?=<\/\1>) 匹配不包含属性的简单HTML标签内里的内容。(?<=<(\w+)>)指定了这样的前缀:被尖括号括起来的单词(比如可能是<\b>),然后是 .* (任意的字符串),最后是一个后缀(?=<\/\1>)。注意后缀里的\/,它用到了前面提过的字符转义;\1则是一个反向引用,引用的正是捕获的第一组,前面的(\w+)匹配的内容,这样如果前缀实际上是<\b>的话,后缀就是</b>了。整个表达式匹配的是< b>和</b>之间的内容(再次提醒,不包括前缀和后缀本身)。

    注释
    (?#comment) 这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读
    小括号的另一种用途是通过语法(?#comment)来包含注释。例如:2[0-4]\d(?#200-249)|25[0-5](?#250-255)|[01]?\d\d?(?#0-199)。

    贪婪与懒惰
    当正则表达式中包含能接受重复的限定符时,通常的行为是(在使整个表达式能得到匹配的前提下)匹配尽可能多的字符。以这个表达式为例:a.*b,它将会匹配最长的以a开始,以b结束的字符串。如果用它来搜索aabab的话,它会匹配整个字符串aabab。这被称为贪婪匹配。

    有时,我们更需要懒惰匹配,也就是匹配尽可能少的字符。前面给出的限定符都可以被转化为懒惰匹配模式,只要在它后面加上一个问号?。这样 .*? 就意味着匹配任意数量的重复,但是在能使整个匹配成功的前提下使用最少的重复。现在看看懒惰版的例子吧:

    a.*?b匹配最短的,以a开始,以b结束的字符串。如果把它应用于aabab的话,它会匹配aab(第一到第三个字符)和ab(第四到第五个字符)。

    常用的懒惰正则表达式:
    *? 重复任意次,但尽可能少重复
    +? 重复1次或更多次,但尽可能少重复
    ?? 重复0次或1次,但尽可能少重复
    {n,m}? 重复n到m次,但尽可能少重复
    {n,}? 重复n次以上,但尽可能少重复

    本文部分引自:https://deerchao.net/tutorials/regex/regex.htm
    推荐一款在线的正则表达式调试工具:https://regex101.com/

    展开全文
  • 正则表达式 价格正则表达式 非负整数正则表达式 正整数正则表达式 //判断是否为价格:校验的价格为大于或等于0的数,最多有两位小数.如果是则返回true,否则返回false. function isPrice(price){ var reg = /...
  • 功能说明:该方法可以编译指定的正则表达式,编译之后的正则表达式执行速度将会提高,如果正则表达式多次被调用,那么调用compile方法可以有效的提高代码的执行速度,如果该正则表达式只能被使用一次,则不会有明显...
  • 正则表达式基础语法及常用正则表达式及正则手册(HTML版)
  • JS正则表达式完整版

    万次阅读 多人点赞 2018-07-17 13:14:13
    第一章 正则表达式字符匹配攻略 1 两种模糊匹配 2. 字符组 3. 量词 4. 多选分支 5. 案例分析 第1章 小结 第二章 正则表达式位置匹配攻略 1. 什么是位置呢? 2. 如何匹配位置呢? 3. 位置的特性 4. 相关...
  • 问题描述:使用js的正则表达式验证邮箱注意事项:1.在正则表达式的前后要加上^在后面要加上$否则会出现错误;2.在使用单个字符是使用[xx]括起来代码:function validateEmail() {var email = document....
  • html正则表达式汇总

    千次阅读 2019-01-15 22:14:58
    1.去除html中多余空格和"&gt;&lt;"标签之间的空格: str.replace(/\s+/g," ").replace(/ &lt;/g,"&lt;") 2.替换小括号和其中内容:   str.replace(/\([^\)]*\...
  • 正则表达式的概念 正则表达式(英语:Regular Expression,在代码中常简写为regex)。 正则表达式是一个字符串,使用单个字符串来描述、用来定义匹配规则,匹配一系列符合某个句法规则的字符串。在开发中,正则...
  • 常用js正则表达式 Javascript正则表达式实战手册

    千次阅读 多人点赞 2018-08-13 00:22:33
    最近做了几个项目,发现正则表达式用得越来越多了。我个人的习惯是,能通过查手册获取的东西绝不死记硬背,虽然大多数技术网站都搜罗了一堆Javascript正则表达式的用法,但我还是想整理一份更有实战意义的手册。说白...
  • java正则表达式详解

    万次阅读 多人点赞 2019-04-02 16:35:46
    一、正则表达式术语 1)元字符 : 非一般字符,具有某种意义的字符。如 : \bX : \b边界符, 以 X开始的单词 2)正则表达式语法大全 字符 说明 \ 将下一字符标记为特殊字符...
  • 压缩文本上的正则表达式搜索 它是什么? zarch是一个正则表达式引擎,它接受输入正则表达式和基于语法的压缩文本,并返回包含正则表达式匹配项的未压缩文本的每一行。 限制 跨行不匹配 不支持反转匹配选项 只有常规...
  • 匹配HTML标记的正则表达式 匹配Email地址的正则表达式 匹配网址URL的正则表达式 匹配国内电话号 匹配中国邮政编码 匹配身份证 匹配ip地址 匹配特定字符串 匹配中文字符的正则表达式 匹配双字节字符(包括汉字在内) ...
  • mysql 提供的模式匹配的其他类型是使用扩展正则表达式。 当你对这类模式进行匹配测试时,使用REGEXP和NOT REGEXP操作符(或RLIKE和NOT RLIKE,它们是同义词)。 扩展正则表达式的一些字符是: “.”匹配任何单个的...
  • 正则表达式 正则表达式匹配年月

    万次阅读 2018-06-13 11:42:30
    正则表达式 注意^和$的使用 ^表示开始 严格匹配按规定的正则开始 否则返回false$表示结束 严格匹配按规定的正则结束 否则返回false只匹配年: /^\d{4}$/ 只匹配年-月:/^\d{4}-((0([1-9]))|(1(0|2)))$/只匹配年...
  • 正则表达式(二)–常用正则表达式 done 正则表达式(二)–常用正则表达式 环境变更 讲解练习 电话号码的正则 身份证号码的正则 电子邮箱的正则 常用正则表达式 合法账号 合法密码 检验汉字 常用1 常用2 参考...
  • WS07 The Website is the API Re 正则表达式详解 提取页面关键信息 robots.txt 网络爬虫排除标准 Beautiful Soup Requests 解析HTML页面 自动爬取HTML页面 自动网络请求提交 掌握定向网络数据爬取和网页解析的基本...
  • 解析HTML正则表达式

    千次阅读 2008-04-04 14:32:00
     //把所有HTML标签找出来哈哈,继 昨天的那个正则表达式 之后又写了一个更长的Regular Expression,全长527,是用于查找出所有的XHTML/HTML的标记外面的所有空格,并将之转换为 的。 希望这个能够解决dudu提的...
  • 对于处理字符串(例如 HTML 处理、日志文件分析和 HTTP 标头分析)的许多应用程序而言,正则表达式是不可缺少的工具。 准确地说,正则表达式(regular expression)是一个用于匹配样式(patterns)的工具,已经应用...
  • 正则表达式是我们经常要用到的检验字符串的是否合法的一个技术点,正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中...
  • 正则表达式

    万次阅读 多人点赞 2019-08-26 16:21:48
    文章目录正则表达式简介正则表达式匹配规则re模块compile 函数Pattern 对象Match 对象范例常见格式分组位置分组分割批量替换正则案例: 正则表达式简介 为什么要学正则表达式? 实际上爬虫一共就四个主要步骤: ...
  • nginx中大量的使用正则表达式来进行字符匹配,最常见于在Location{ }块内,用于配对请求的访问URL,或者对某些内置变量进行条件判断,如:location ~ .*\.(js|css)?$ { expires 1h; }学过java正则表达式的同学或许看...
  • 匹配HTML标记的正则表达式:<(\S*?)[^>]*>.*?|*? /> 匹配首尾空白字符的正则表达式:^\s*|\s*$ ps:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式 匹配Email地址的正则表达式...
  • javascript正则表达式和java正则表达式的区别 javascript中的正则表达式和java的正则表达式基本上是相同的,区别在于分组引用和对象,方法   具体区别: 1).javascript正则表达式创建有两种方法: a.显式创建:...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 321,451
精华内容 128,580
关键字:

html正则表达式