精华内容
下载资源
问答
  • 名字正则表达式(包含新疆)普遍的写法生僻字 普遍的写法 private static final Pattern CHINESE_XINJIANG_PATTERN = Pattern.compile("^[\u4e00-\u9fa5.·]{0,}$"); 生僻字 在开发上线之后,发现中国汉字博大精深...

    名字正则表达式(包含新疆)

    普遍的写法

    private static final Pattern CHINESE_XINJIANG_PATTERN =
                Pattern.compile("^[\u4e00-\u9fa5.·]{0,}$");
    

    生僻字

    在开发上线之后,发现中国汉字博大精深,有一些汉字比较有争议,比如被现代汉语词典去掉了,或者编码有问题,没有在该正则内的,都无法匹配上面的正则,下面是我们在生产环境遇到的一些生僻字,分享给大家。

    /u36c3

    /u4DAE
    那么加上这两个字的正则就是

    private static final Pattern CHINESE_XINJIANG_PATTERN =
                Pattern.compile("^[\u4e00-\u9fa5.·\u36c3\u4DAE]{0,}$");
    

    如果后续有遇到生僻字的话,会及时更新哦~~希望大家多多关注

    展开全文
  • 正则表达式的快速学习方法 1、入门简介 简单的说,正则表达式是一种可以用于模式匹配和替换的强有力的工具。我们可以在几乎所有的基于UNIX系统的工具中找到正则表达式的身影,例如,vi编辑器,Perl或PHP脚本...

    正则表达式的快速学习方法

    1、入门简介

    简单的说,正则表达式是一种可以用于模式匹配和替换的强有力的工具。我们可以在几乎所有的基于UNIX系统的工具中找到正则表达式的身影,例如,vi编辑器,Perl或PHP脚本语言,以及awk或sed shell程序等。此外,象JavaScript这种客户端的脚本语言也提供了对正则表达式的支持。由此可见,正则表达式已经超出了某种语言或某个系统的局限,成为人们广为接受的概念和功能。
    正则表达式可以让用户通过使用一系列的特殊字符构建匹配模式,然后把匹配模式与数据文件、程序输入以及WEB页面的表单输入等目标对象进行比较,根据比较对象中是否包含匹配模式,执行相应的程序。
      举例来说,正则表达式的一个最为普遍的应用就是用于验证用户在线输入的邮件地址的格式是否正确。如果通过正则表达式验证用户邮件地址的格式正确,用户所填写的表单信息将会被正常处理;反之,如果用户输入的邮件地址与正则表达的模式不匹配,将会弹出提示信息,要求用户重新输入正确的邮件地址。由此可见正则表达式在WEB应用的逻辑判断中具有举足轻重的作用。

    2、基本语法

    在对正则表达式的功能和作用有了初步的了解之后,我们就来具体看一下正则表达式的语法格式。
    正则表达式的形式一般如下:
    /love/
    其中位于“/”定界符之间的部分就是将要在目标对象中进行匹配的模式。用户只要把希望查找匹配对象的模式内容放入“/”定界符之间即可。为了能够使用户更加灵活的定制模式内容,正则表达式提供了专门的“元字符”。所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式。
    较为常用的元字符包括: “+”, “*”,以及 “?”。其中,“+”元字符规定其前导字符必须在目标对象中连续出现一次或多次,“*”元字符规定其前导字符必须在目标对象中出现零次或连续多次,而“?”元字符规定其前导对象必须在目标对象中连续出现零次或一次。
    下面,就让我们来看一下正则表达式元字符的具体应用。
    /fo+/
    因为上述正则表达式中包含“+”元字符,表示可以与目标对象中的 “fool”, “fo”, 或者 “football”等在字母f后面连续出现一个或多个字母o的字符串相匹配。
    /eg*/
    因为上述正则表达式中包含“*”元字符,表示可以与目标对象中的 “easy”, “ego”, 或者 “egg”等在字母e后面连续出现零个或多个字母g的字符串相匹配。
    /Wil?/
    因为上述正则表达式中包含“?”元字符,表示可以与目标对象中的 “Win”, 或者 “Wilson”,等在字母i后面连续出现零个或一个字母l的字符串相匹配。
    除了元字符之外,用户还可以精确指定模式在匹配对象中出现的频率。例如,
    /jim{2,6}/
    上述正则表达式规定字符m可以在匹配对象中连续出现2-6次,因此,上述正则表达式可以同jimmy或jimmmmmy等字符串相匹配。
    在对如何使用正则表达式有了初步了解之后,我们来看一下其它几个重要的元字符的使用方式。
    \s:用于匹配单个空格符,包括tab键和换行符;
    \S:用于匹配除单个空格符之外的所有字符;
    \d:用于匹配从0到9的数字;
    \w:用于匹配字母,数字或下划线字符;
    \W:用于匹配所有与\w不匹配的字符;
    . :用于匹配除换行符之外的所有字符。
    (说明:我们可以把\s和\S以及\w和\W看作互为逆运算)
    下面,我们就通过实例看一下如何在正则表达式中使用上述元字符。
    /\s+/
    上述正则表达式可以用于匹配目标对象中的一个或多个空格字符。
    /\d000/
    如果我们手中有一份复杂的财务报表,那么我们可以通过上述正则表达式轻而易举的查找到所有总额达千元的款项。

    除了我们以上所介绍的元字符之外,正则表达式中还具有另外一种较为独特的专用字符,即定位符。定位符用于规定匹配模式在目标对象中的出现位置。
    较为常用的定位符包括: “^”, “$”, “\b” 以及 “\B”。其中,“^”定位符规定匹配模式必须出现在目标字符串的开头,“$”定位符规定匹配模式必须出现在目标对象的结尾,\b定位符规定匹配模式必须出现在目标字符串的开头或结尾的两个边界之一,而“\B”定位符则规定匹配对象必须位于目标字符串的开头和结尾两个边界之内,即匹配对象既不能作为目标字符串的开头,也不能作为目标字符串的结尾。同样,我们也可以把“^”和“$”以及“\b”和“\B”看作是互为逆运算的两组定位符。举例来说:
    /^hell/
    因为上述正则表达式中包含“^”定位符,所以可以与目标对象中以 “hell”, “hello”或 “hellhound”开头的字符串相匹配。
    /ar$/
    因为上述正则表达式中包含“$”定位符,所以可以与目标对象中以 “car”, “bar”或 “ar” 结尾的字符串相匹配。

    /\bbom/
    因为上述正则表达式模式以“\b”定位符开头,所以可以与目标对象中以 “bomb”, 或 “bom”开头的字符串相匹配。
    /man\b/
    因为上述正则表达式模式以“\b”定位符结尾,所以可以与目标对象中以 “human”, “woman”或 “man”结尾的字符串相匹配。
    为了能够方便用户更加灵活的设定匹配模式,正则表达式允许使用者在匹配模式中指定某一个范围而不局限于具体的字符。例如:
    /[A-Z]/
    上述正则表达式将会与从A到Z范围内任何一个大写字母相匹配。
    /[a-z]/
    上述正则表达式将会与从a到z范围内任何一个小写字母相匹配。
    /[0-9]/
    上述正则表达式将会与从0到9范围内任何一个数字相匹配。
    /([a-z][A-Z][0-9])+/
    上述正则表达式将会与任何由字母和数字组成的字符串,如 “aB0” 等相匹配。这里需要提醒用户注意的一点就是可以在正则表达式中使用 “()” 把字符串组合在一起。“()”符号包含的内容必须同时出现在目标对象中。因此,上述正则表达式将无法与诸如 “abc”等的字符串匹配,因为“abc”中的最后一个字符为字母而非数字。
    如果我们希望在正则表达式中实现类似编程逻辑中的“或”运算,在多个不同的模式中任选一个进行匹配的话,可以使用管道符 “|”。例如:
    /to|too|2/
    上述正则表达式将会与目标对象中的 “to”, “too”, 或 “2” 相匹配。
    正则表达式中还有一个较为常用的运算符,即否定符 “[^]”。与我们前文所介绍的定位符 “^” 不同,否定符 “[^]”规定目标对象中不能存在模式中所规定的字符串。例如:
    /[^A-C]/
    上述字符串将会与目标对象中除A,B,和C之外的任何字符相匹配。一般来说,当“^”出现在 “[]”内时就被视做否定运算符;而当“^”位于“[]”之外,或没有“[]”时,则应当被视做定位符。
    最后,当用户需要在正则表达式的模式中加入元字符,并查找其匹配对象时,可以使用转义符“\”。例如:
    /Th\*/
    上述正则表达式将会与目标对象中的“Th*”而非“The”等相匹配。

    3、使用实例

    ①PHP中可以使用ereg()函数进行模式匹配操作。ereg()函数的使用格式如下:
     

    以下为引用的内容:
      ereg(pattern, string)

      其中,pattern代表正则表达式的模式,而string则是执行查找替换操作的目标对象。同样是验证邮件地址,使用PHP编写的程序代码如下:

    < ?php 
       if (ereg(“^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+”,$email)){ 
                  echo “Your email address is correct!”;} 
       else{ 
                  echo “Please try again!”; 
          } 
    ?>


    ②JavaScript 1.2中带有一个功能强大的RegExp()对象,可以用来进行正则表达式的匹配操作。其中的test()方法可以检验目标对象中是否包含匹配模式,并相应的返回true或false。

    我们可以使用JavaScript编写以下脚本,验证用户输入的邮件地址的有效性。

    以下为引用的内容:
     <html> 
       <head> 
        <script language=\"Javascript1.2\"> 
         <!-- start hiding 
         function verifyAddress(obj) 
         { 
          var email = obj.email.value; 
          var pattern = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/; 
          flag = pattern.test(email); 
          if(flag) 
          { 
           alert(“Your email address is correct!”); 
           return true; 
          } 
          else 
           { 
            alert(“Please try again!”); 
            return false; 
            } 
          } 
         // stop hiding --> 
        </script> 
       </head> 
       <body> 
       <form onSubmit=\"return verifyAddress(this);\"> 
       <input name=\"email\" type=\"text\"/> 
       <input type=\"submit\"/> 
       </form> 
      </body> 
     </html>

    想必很多人都对正则表达式都头疼。今天,我以我的认识,加上网上一些文章,希望用常人都可以理解的表达方式。来和大家分享学习经验。

    开篇,还是得说说 ^ 和 $ 他们是分别用来匹配字符串的开始和结束,以下分别举例说明:

    “^The”:开头一定要有”The”字符串;
    “of despair$”:结尾一定要有”of despair” 的字符串;

    那么,
    “^abc$”:就是要求以abc开头和以abc结尾的字符串,实际上是只有abc匹配;
    “notice”:匹配包含notice的字符串;

    你可以看见如果你没有用我们提到的两个字符(最后一个例子),就是说模式(正则表达式)可以出现在被检验字符串的任何地方,你没有把他锁定到两边。

    接着,说说 ‘*’ ‘+’ 和 ‘?’
    他们用来表示一个字符可以出现的次数或者顺序,他们分别表示:
    “zero or more”相当于{0,}
    “one or more”相当于{1,}
    “zero or one.”相当于{0,1}

    这里是一些例子:

    “ab*”:和ab{0,}同义,匹配以a开头,后面可以接0个或者N个b组成的字符串(”a”, “ab”, “abbb”, 等);
    “ab+”:和ab{1,}同义,同上条一样,但最少要有一个b存在 (”ab” “abbb”等);
    “ab?”:和ab{0,1}同义,可以没有或者只有一个b;
    “a?b+$”:匹配以一个或者0个a再加上一个以上的b结尾的字符串。

    要点:’*’ ‘+’ 和 ‘?’ 只管它前面那个字符。

    你也可以在大括号里面限制字符出现的个数,比如:

    “ab{2}”: 要求a后面一定要跟两个b(一个也不能少)(”abb”);
    “ab{2,}”: 要求a后面一定要有两个或者两个以上b(如”abb” “abbbb” 等);
    “ab{3,5}”: 要求a后面可以有2-5个b(”abbb”, “abbbb”, or “abbbbb”)。

    现在我们把一定几个字符放到小括号里,比如:

    “a(bc)*”: 匹配 a 后面跟0个或者一个”bc”;
    “a(bc){1,5}”: 一个到5个 “bc”;

    还有一个字符 ‘|’,相当于OR操作:

    “hi|hello”: 匹配含有”hi” 或者 “hello” 的 字符串;
    “(b|cd)ef”: 匹配含有 “bef” 或者 “cdef”的字符串;
    “(a|b)*c”: 匹配含有这样多个(包括0个)a或b,后面跟一个c的字符串;

    一个点(’.’)可以代表所有的单一字符,不包括”\n”

    如果,要匹配包括”\n”在内的所有单个字符,怎么办?

    用’[\n.]’这种模式。

    “a.[0-9]”: 一个a加一个字符再加一个0到9的数字;
    “^.{3}$”: 三个任意字符结尾。

    中括号括住的内容只匹配一个单一的字符

    “[ab]”: 匹配单个的 a 或者 b ( 和 “a│b” 一样);
    “[a-d]”: 匹配’a’ 到’d’的单个字符 (和”a│b│c│d” 还有 “[abcd]”效果一样);

    一般我们都用[a-zA-Z]来指定字符为一个大小写英文:

    “^[a-zA-Z]”: 匹配以大小写字母开头的字符串;
    “[0-9]%”: 匹配含有 形如 x% 的字符串;
    “,[a-zA-Z0-9]$”: 匹配以逗号再加一个数字或字母结尾的字符串;

    你也可以把你不想要得字符列在中括号里,你只需要在总括号里面使用’^’ 作为开头 “%[^a-zA-Z]%” 匹配含有两个百分号里面有一个非字母的字符串。

    要点:^用在中括号开头的时候,就表示排除括号里的字符。

    为了PHP能够解释,你必须在这些字符面前后加”,并且将一些字符转义。

    不要忘记在中括号里面的字符是这条规路的例外—在中括号里面,所有的特殊字符,包括(”),都将失去他们的特殊性质 “[*\+?{}.]”匹配含有这些字符的字符串:

    还有,正如regx的手册告诉我们:”如果列表里含有’]’,最好把它作为列表里的第一个字符(可能跟在’^’后面)。如果含有’-’,最好把它放在最前面或者最后面, or 或者一个范围的第二个结束点[a-d-0-9]中间的‘-’将有效。

    看了上面的例子,你对{n,m}应该理解了吧。要注意的是,n和m都不能为负整数,而且n总是小于m。这样,才能 最少匹配n次且最多匹配m次。如”p{1,5}”将匹配 “pvpppppp”中的前五个p

    下面说说以\开头的

    \b 书上说他是用来匹配一个单词边界,就是…比如’ve\b’,可以匹配love里的ve而不匹配very里有ve

    \B 正好和上面的\b相反。例子我就不举了

    …..突然想起来….可以到 http://www.phpv.net/article.php/251 看看其它用\开头的语法

    好,我们来做个应用:如何构建一个模式来匹配货币数量的输入。

    构建一个匹配模式去检查输入的信息是否为一个表示money的数字。我们认为一个表示money的数量有四种方式:”10000.00″ 和 “10,000.00″,或者没有小数部分,”10000″ and “10,000″。现在让我们开始构建这个匹配模式:

    ^[1-9][0-9]*$

    这是所变量必须以非0的数字开头。但这也意味着单一的”0″也不能通过测试。以下是解决的方法:

    ^(0|[1-9][0-9]*)$

    “只有0和不以0开头的数字与之匹配”,我们也可以允许一个负号在数字之前:

    ^(0|-?[1-9][0-9]*)$

    这就是:0或者一个以0开头且可能有一个负号在前面的数字。好了,现在让我们别那么严谨,允许以0开头。现在让我们放弃负号,因为我们在表示钱币的时候并不需要用到。我们现在指定模式用来匹配小数部分:

    ^[0-9]+(\.[0-9]+)?$

    这暗示匹配的字符串必须最少以一个阿拉伯数字开头。但是注意,在上面模式中 “10.” 是不匹配的, 只有 “10″ 和 “10.2″ 才可以,你知道为什么吗?

    ^[0-9]+(\.[0-9]{2})?$

    我们上面指定小数点后面必须有两位小数。如果你认为这样太苛刻,你可以改成:

    ^[0-9]+(\.[0-9]{1,2})?$

    这将允许小数点后面有一到两个字符。现在我们加上用来增加可读性的逗号(每隔三位),我们可以这样表示:

    ^[0-9]{1,3}(,[0-9]{3})*(\.[0-9]{1,2})?$

    不要忘记’+’可以被’*’替代如果你想允许空白字符串被输入话,也不要忘记反斜杆’\’在php字符串中可能会出现错误 (很普遍的错误):

    现在,我们已经可以确认字符串了,我们现在把所有逗号都去掉str_replace(”,”, “”, $money)然后在把类型看成double然后我们就可以通过他做数学计算了。

    再来一个:

    构造检查email的正则表达式

    在一个完整的email地址中有三个部分:

    1. 用户名 (在 ‘@’ 左边的一切)
    2.’@’
    3. 服务器名(就是剩下那部分)

    用户名可以含有大小写字母阿拉伯数字,句号(’.’)减号(’-’)and下划线’_’)。服务器名字也是符合这个规则,当然下划线除外。

    现在,用户名的开始和结束都不能是句点,服务器也是这样。还有你不能有两个连续的句点他们之间至少存在一个字符,好现在我们来看一下怎么为用户名写一个匹配模式:

    ^[_a-zA-Z0-9-]+$

    现在还不能允许句号的存在。我们把它加上:

    ^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*$

    上面的意思就是说:以至少一个规范字符(除了.)开头,后面跟着0个或者多个以点开始的字符串。

    简单化一点, 我们可以用eregi()取代ereg()、eregi()对大小写不敏感, 我们就不需要指定两个范围 “a-z” 和 “A-Z”只需要指定一个就可以了:

    ^[_a-z0-9-]+(\.[_a-z0-9-]+)*$

    后面的服务器名字也是一样,但要去掉下划线:

    ^[a-z0-9-]+(\.[a-z0-9-]+)*$

    好。现在只需要用”@”把两部分连接:

    ^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$

    这就是完整的email认证匹配模式了,只需要调用:

    eregi(”^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$”,$eamil)

    就可以得到是否为email了

    正则表达式的其他用法

    提取字符串

    ereg() and eregi() 有一个特性是允许用户通过正则表达式去提取字符串的一部分(具体用法你可以阅读手册)。比如说,我们想从 path/URL 提取文件名,下面的代码就是你需要:

    ereg(”([^\\/]*)$”, $pathOrUrl, $regs);
    echo $regs[1];

    高级的代换

    ereg_replace() 和 eregi_replace()也是非常有用的,假如我们想把所有的间隔负号都替换成逗号:

    ereg_replace(”[ \n\r\t]+”, “,”, trim($str));

    最后,我把另一串检查EMAIL的正则表达式让看文章的你来分析一下:

    “^[-!#$%&\’*+\\./0-9=?A-Z^_`a-z{|}~]+’.’@’.’[-!#$%&\’*+\\/0-9=?A-Z^_`a-z{|}~]+\.’.’[-!#$%&\’*+\\./0-9=?A-Z^_`a-z{|}~]+$”

    如果能方便的读懂,那这篇文章的目的就达到了。

    参考地址:http://www.chinaz.com/program/2008/1020/41452.shtml

    展开全文
  • JS怎么用正则表达式判断输入的日期格式为 yyyy-mm-dd请大家把具体代码发布一下 最好是有代码注释滴 麻烦大家哒/^\d{4}\-\d{2}\-\d{2}$/ 这里只是限制了格式必须是yyyy-mm-dd ,如果想做的年月日校验很精准,那比较...

    JS怎么用正则表达式判断输入的日期格式为 yyyy-mm-dd请大家把具体代码发布一下 最好是有代码注释滴 麻烦大家哒/^\d{4}\-\d{2}\-\d{2}$/ 这里只是限制了格式必须是yyyy-mm-dd ,如果想做的年月日校验很精准,那比较麻烦。

    js 写 验证日期正则表达式

    按照 这样的验证格式写 年-月-日 例如 1987-09-01 js里正则表达式怎么写如果单纯用正则的话,去掉第一个/和最后的/ig 简单的日期格式验证: /^([1-2]\d{3})[\/|\-](0?[1-9]|10|11|12)[\/|\-]([1-2]?[0-9]|0[1-9]|30|31)$/ig 下面的正则式不仅仅匹配了日期格式,而且对日期的逻辑做了严格要分享,判断了大月31天。

    6497b49a75b560aaaeae8234498f7d5e.png

    分享一js正则表达式验证YYYY/MM/DD格式日期。

    代码如下: /*日期验证dd/mm/yyyy*/ functionisDate(str){ vardate=str; varresult=date.match(/^([0]?[1-9]|[1|2][0-9]|[3][0|1])[/]([0]?[1-9]|[1][0-2])[/]([0-9]{4}|[0-9]{2})$/); if(result==null) returnfalse; vard=newDate(result[3],re有些事心里清楚就好,不必去验证问清楚了就彻底完了。

    验证日期格式的正则表达式,日期格式必须为1988101\b\d{4}((?:0[13578]|1[02])(?:0[1-9]|[12]\d|3[01])|02(?:0[1-9]|[12]\d)|(?:0[469]|11)(?:0[1-9]|[12]\d|30))\b 小编把你的备注改成了你的名字,连名带姓最初的样子。

    尽可能做了日期合格性保证,但有关闰年的判断用正则表达式难以实现,故2月一概允许29日 你以为热情主动他会感动,你以为你患得患失他会心痛,其实都没有,只有你一次又一次犯贱再主动。

    对年份没有特殊限制,如欲限制。人生最遗憾的,莫过于,轻易地放弃了不该放弃的,固执地坚持了不该坚持的。

    js正则表达式如何验证文本框输入的时间格式 为下列2002-04-30 00:0000很多人喜欢做两件事,留一个看得见的伤口,等一个看不见的人。

    楼主欢迎来到土嘎嘎,正则匹配最重要的是你要知道所有可能的变化。 如果格式非常一致,就像你举的例子一样,那么一个很简单的匹配,如下就能解决问题: \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} 如果是变化比较多,比如年份可能是2位。

    js正则表达式验证时间格式yyyy/MM/dd HH:mm

    这样的正则表达如何写,(年和月中间必须是“/”月和日也一样HH24小时/^\d{4,}\/(?:0?\d|1[12])\/(?:[012]?\d|3[01]) (?:[01]?\d|2[0-4]):(?:[0-5]?\d|60)$/.test('2015/11/3 12:24')有些事藏在心里是莫大的委屈,话到嘴边又觉得无足挂齿不值一提。

    java中Js验证日期的正则表达式格式为:yyyy/MM/dd有人说,当你有了固定歌单后,你就很少会去听新歌,但假如有一天路过某个小街不小心听到了喜欢的,你会把它下载来单曲循环到死。

    自己在网上找的正则是:var result = date.match(/((^((1[8-9]\d{2})|([等一个不爱你的人,就像在夏天里等雪,在冬天里等花开,小编不等你,小编等自己死心。

    var result=data.match(/((^((1[8-9]\d{2})|([2-9]\d{3}))(\/)(10|12|0?[13578])(\/)(3[01]|[12][0-9]|0?[1-9])$)|(^((1[8-9]\d{2})|([2-9]\d{3}))(\/)(11|0?[469])(\/)(30|[12][0-9]|0?[1-9])$)|(^((1[8-9]\d{2})|([2-9]\d{3}))(\/)(0?2)(\/)(2走出来不代表不爱,走出来就是睡一觉的事,最大的感觉就是,一切都有目标和规划了。

    正则表达式在js中判断日期时间类型光阴浩淼岁月弄人,没谁能留下,众生皆过客。小编们对时间而言,只算一个不起眼的节点,都是赤裸而来,空手而归。所有的挣扎努力终要幻化云烟,曾经的心绪情感最后荡然无迹。对往人往事,勿追忆过甚,失却的唯有放下,方会少些负重;看此世今生,莫摇摆无定,只要珍惜了努力了,岂枉白来一回。

    /[,./:\\[]]/; 中间加你要屏蔽的字符 操,腾讯,你干嘛???正则这样写有错么??这审核你妈了吧,每次都那样。

    分享一JS日期正则表达式,格式yyyy-MM-dd hh:mm:ss 有些苦,咽下去,消化了,才会得到别人的信任。被信任不是你说自己有多强,而是面对困难,你有多安静。

    ^\d{4}-(0\d|1[0-2])-([0-2]\d|3[01])( ([01]\d|2[0-3])\:[0-5]\d\:[0-5]\d)?$ 这个正则 yyyy-MM-dd hh:mm:ss可以 yyyy-MM-dd 后面不带准备时间也可以 如果一定要准备时间, 去掉最后一个问号, 如下 ^\d{4}-(0\d|1[0-2])-([0-2]\d|3[01])( ([01]\或许,是小编自作多情,让小编自导自演出了这场悲剧。

    正则表达式,判断格式为yyyyMMdd的日期格式。

    首先新建一个html文件,命名为test.html,在test.html文件内,使用input标签创建一个日期输入框,并设置其id属性为shijian。 对你的记忆只有那张模糊的背影,至今还不知道你的名你的姓。

    在test.html文件内,使用button标签创建一个按钮,当按钮被点击,执行check()函数。 但小编总是从每一件碌碌人生无关紧要的事情里转几个弯又想到你

    在test.html文件内,创建一时间总是把最好的人留到最后,毕竟喜欢就像一阵风,而爱是细水长流。

    展开全文
  • 正则表达式教程及常用正则表达式

    千次阅读 2016-12-07 01:22:52
    正则表达式教程、常用正则表达式以及正则表达式测试工具

    什么是正则表达式

    在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。

    正则表达式元素介绍

    元字符

    1.元字符\b是正则表达式规定的一个特殊代码(好吧,某些人叫它元字符,metacharacter),代表着单词的开头或结尾,也就是单词的分界处。虽然通常英文的单词是由空格,标点符号或者换行来分隔的,但是\b并不匹配这些单词分隔字符中的任何一个,它只匹配一个位置。
    2.元字符\d是个新的元字符,匹配一位数字(0,或1,或2,或……)。
    3.元字符\s匹配任意的空白符,包括空格,制表符(Tab),换行符,中文全角空格等。
    4.元字符\w匹配字母或数字或下划线或汉字等。
    5.元字符.是另一个元字符,匹配除了换行符以外的任意字符。
    6.元字符-不是元字符,只匹配它本身——连字符(或者减号,或者中横线,或者随你怎么称呼它)。
    7.元字符^和元字符$都匹配一个位置,这和 \b有点类似。^匹配你要用来查找的字符串的开头,$匹配结尾。比如一个网站如果要求你填写的QQ号必须为5位到12位数字时,可以使用:^\d{5,12}$

    这里写图片描述

    元字符释义

    1.0\d\d-\d\d\d\d\d\d\d\d匹配这样的字符串:以0开头,然后是两个数字,然后是一个连字号-,最后是8个数字(也就是中国的电话号码。当然,这个例子只能匹配区号为3位的情形)。
    为了避免那么多烦人的重复,我们也可以这样写这个表达式:0\d{2}-\d{8}。这里\d后面的{2}({8})的意思是前面\d必须连续重复匹配2次(8次)。
    2.\ba\w*\b匹配以字母a开头的单词——先是某个单词开始处(\b),然后是字母a,然后是任意数量的字母或数字(\w*),最后是单词结束处(\b)。
    3.\b\w{6}\b 匹配刚好6个字符的单词。
    4.^\d{5,12}$, 因为使用了^$,所以输入的整个字符串都要用来和\d{5,12}来匹配,也就是说整个输入必须是5到12个数字,因此如果输入的QQ号能匹配这个正则表达式的话,那就符合要求了。
    和忽略大小写的选项类似,有些正则表达式处理工具还有一个处理多行的选项。如果选中了这个选项,^$的意义就变成了匹配行的开始处和结束处。

    转义字符

    如果你想查找元字符本身的话,比如你查找 ., ,或者*,就出现了问题:你没办法指定它们,因为它们会被解释成别的意思。这时你就得使用\来取消这些字符的特殊意义。因此,你应该使用\.\*。当然,要查找\本身,你也得用\\

    例如:www.baidu.com匹配www.baidu.com,C:\Windows匹配C:\Windows。

    限定符

    你已经看过了前面的*,+,{2},{5,12}这几个匹配重复的方式了。下面是正则表达式中所有的限定符(指定数量的代码,例如*,{5,12}等
    这里写图片描述

    限定符释义

    1.元字符*同样是元字符,不过它代表的不是字符,也不是位置,而是数量——它指定*前边的内容可以连续重复使用任意次以使整个表达式得到匹配。因此,.*连在一起就意味着任意数量的不包含换行的字符。
    2.\d+匹配1个或更多连续的数字。这里的+是和*类似的元字符,不同的是*匹配重复任意次(可能是0次),而+则匹配重复1次或更多次。
    3.这里的{5,12}和前面介绍过的{2}是类似的,只不过{2}匹配只能不多不少重复2次,{5,12}则是重复的次数不能少于5次,不能多于12次,否则都不匹配。
    4.Windows\d+匹配Windows后面跟1个或更多数字
    5.^\w+匹配一行的第一个单词(或整个字符串的第一个单词,具体匹配哪个意思得看选项设置)

    字符类

    要想查找数字,字母或数字,空白是很简单的,因为已经有了对应这些字符集合的元字符,但是如果你想匹配没有预定义元字符的字符集合(比如元音字母a,e,i,o,u),应该怎么办?
    很简单,你只需要在方括号里列出它们就行了,[aeiou]就匹配任何一个英文元音字母
    [.?!]匹配标点符号.,?,!这三个中的任何一个。
    我们也可以轻松地指定一个字符范围,如[0-9]代表的含意与\d就是完全一致的:一位数字
    同理[a-z0-9A-Z_]也完全等同于\w(如果只考虑英文的话)。
    \(?0\d{2}[) -]?\d{8}是一个更复杂的表达式, ()也是元字符,后面的分组节里会提到,所以在这里需要使用转义。
    这个表达式可以匹配几种格式的电话号码,像(010)88886666,或022-22334455,或02912345678等。我们对它进行一些分析吧:首先是一个转义字符\(,它能出现0次或1次(?),然后是一个0,后面跟着2个数字(\d{2}),然后是)或-或空格中的一个,它出现1次或不出现(?),最后是8个数字(\d{8})。

    反义

    有时需要查找不属于某个能简单定义的字符类的字符。比如想查找除了数字以外,其它任意字符都行的情况,这时需要用到反义

    这里写图片描述

    \S+匹配不包含空白符的字符串。
    <a[^>]+>匹配用尖括号括起来的以a开头的字符串。

    条件分支

    刚才那个表达式也能匹配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?)
    理解这个表达式的关键是理解2[0-4]\d|25[0-5]|[01]?\d\d?,这里我就不细说了,你自己应该能分析得出来它的意义。

    分组之后向引用

    使用小括号指定一个子表达式后,匹配这个子表达式的文本(也就是此分组捕获的内容)可以在表达式或其它程序中作进一步的处理。默认情况下,每个分组会自动拥有一个组号,规则是:从左向右,以分组的左括号为标志,第一个出现的分组的组号为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)不会改变正则表达式的处理方式,只是这样的组匹配的内容不会像前两种那样被捕获到某个组里面,也不会拥有组号。

    零宽断言

    接下来的四个用于查找在某些内容(但并不包括这些内容)之前或之后的东西,也就是说它们像\b,^,$那样用于指定一个位置,这个位置应该满足一定的条件(即断言),因此它们也被称为零宽断言。

    零宽断言释义

    1.(?=exp)也叫零宽度正预测先行断言,它断言自身出现的位置的后面能匹配表达式exp。比如\b\w+(?=ing\b),匹配以ing结尾的单词的前面部分(除了ing以外的部分),如查找I’m singing while you’re dancing.时,它会匹配sing和danc。
    2.(?<=exp)也叫零宽度正回顾后发断言,它断言自身出现的位置的前面能匹配表达式exp。比如(?<=\bre)\w+\b会匹配以re开头的单词的后半部分(除了re以外的部分),例如在查找reading a book时,它匹配ading。
    3.假如你想要给一个很长的数字中每三位间加一个逗号(当然是从右边加起了),你可以这样查找需要在前面和里面添加逗号的部分:(?<=\d)\d{3})+\b,用它对1234567890进行查找时结果是234567890。
    4.下面这个例子同时使用了这两种断言:(?<=\s)\d+(?=\s)匹配以空白符间隔的数字(再次强调,不包括这些空白符)。

    负向零宽断言

    前面我们提到过怎么查找不是某个字符或不在某个字符类里的字符的方法(反义)。但是如果我们只是想要确保某个字符没有出现,但并不想去匹配它时怎么办?例如,如果我们想查找这样的单词–它里面出现了字母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。负向零宽断言能解决这样的问题,因为它只匹配一个位置,并不消费任何字符。现在,我们可以这样来解决这个问题:\b\w*q(?!u)\w*\b
    零宽度负预测先行断言(?!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)来包含注释。例如:2[0-4]\d(?#200-249)|25[0-5](?#250-255)|[01]?\d\d?(?#0-199)
    要包含注释的话,最好是启用“忽略模式里的空白符”选项,这样在编写表达式时能任意的添加空格,Tab,换行,而实际使用时这些都将被忽略。启用这个选项后,在#后面到这一行结束的所有文本都将被当成注释忽略掉。例如,我们可以前面的一个表达式写成这样:

    (?<=    # 断言要匹配的文本的前缀
          <(\w+)> # 查找尖括号括起来的字母或数字(即HTML/XML标签)
          )       # 前缀结束
          .*      # 匹配任意文本
          (?=     # 断言要匹配的文本的后缀
          <\/\1>  # 查找尖括号括起来的内容:前面是一个"/",后面是先前捕获的标签
          )       # 后缀结束
    

    贪婪与懒惰

    当正则表达式中包含能接受重复的限定符时,通常的行为是(在使整个表达式能得到匹配的前提下)匹配尽可能多的字符。以这个表达式为例:a.*b,它将会匹配最长的以a开始,以b结束的字符串。如果用它来搜索aabab的话,它会匹配整个字符串aabab。这被称为贪婪匹配。
    有时,我们更需要懒惰匹配,也就是匹配尽可能少的字符。前面给出的限定符都可以被转化为懒惰匹配模式,只要在它后面加上一个问号?。这样.*?就意味着匹配任意数量的重复,但是在能使整个匹配成功的前提下使用最少的重复。现在看看懒惰版的例子吧:
    a.*?b匹配最短的,以a开始,以b结束的字符串。如果把它应用于aabab的话,它会匹配aab(第一到第三个字符)和ab(第四到第五个字符)。
    这里写图片描述

    处理选项

    上面介绍了几个选项如忽略大小写,处理多行等,这些选项能用来改变处理正则表达式的方式。下面是.Net中常用的正则表达式选项:
    这里写图片描述

    一个经常被问到的问题是:是不是只能同时使用多行模式和单行模式中的一种?答案是:不是。这两个选项之间没有任何关系,除了它们的名字比较相似(以至于让人感到疑惑)以外。

    平衡组/递归匹配

    有时我们需要匹配像( 100 * ( 50 + 15 ) )这样的可嵌套的层次性结构,这时简单地使用\(.+\)则只会匹配到最左边的左括号和最右边的右括号之间的内容(这里我们讨论的是贪婪模式,懒惰模式也有下面的问题)。假如原来的字符串里的左括号和右括号出现的次数不相等,比如( 5 / ( 3 + 2 ) ) ),那我们的匹配结果里两者的个数也不会相等。有没有办法在这样的字符串里匹配到最长的,配对的括号之间的内容呢?
    为了避免(\(把你的大脑彻底搞糊涂,我们还是用尖括号代替圆括号吧。现在我们的问题变成了如何把xx <aa <bbb> <bbb> aa> yy这样的字符串里,最长的配对的尖括号内的内容捕获出来?

    这里需要用到以下的语法构造:
    (?'group') 把捕获的内容命名为group,并压入堆栈(Stack)
    (?'-group') 从堆栈上弹出最后压入堆栈的名为group的捕获内容,如果堆栈本来为空,则本分组的匹配失败
    (?(group)yes|no) 如果堆栈上存在以名为group的捕获内容的话,继续匹配yes部分的表达式,否则继续匹配no部分
    (?!) 零宽负向先行断言,由于没有后缀表达式,试图匹配总是失败

    我们需要做的是每碰到了左括号,就在压入一个"Open",每碰到一个右括号,就弹出一个,到了最后就看看堆栈是否为空--如果不为空那就证明左括号比右括号多,那匹配就应该失败。正则表达式引擎会进行回溯(放弃最前面或最后面的一些字符),尽量使整个表达式得到匹配。

    <                         #最外层的左括号
        [^<>]*                #最外层的左括号后面的不是括号的内容
        (
            (
                (?'Open'<)    #碰到了左括号,在黑板上写一个"Open"
                [^<>]*       #匹配左括号后面的不是括号的内容
            )+
            (
                (?'-Open'>)   #碰到了右括号,擦掉一个"Open"
                [^<>]*        #匹配右括号后面不是括号的内容
            )+
        )*
        (?(Open)(?!))         #在遇到最外层的右括号前面,判断黑板上还有没有没擦掉的"Open";如果还有,则匹配失败
    
    >                         #最外层的右括号
    

    平衡组的一个最常见的应用就是匹配HTML,下面这个例子可以匹配嵌套的<div>标签:<div[^>]*>[^<>]*(((?'Open'<div[^>]*>)[^<>]*)+((?'-Open'</div>)[^<>]*)+)*(?(Open)(?!))</div>

    其他

    这里写图片描述

    20个常用的正则表达式

    1.校验密码强度

    密码的强度必须是包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间。

    ^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$
    

    2.校验中文

    字符串仅能是中文。

    ^[\u4e00-\u9fa5]{0,}$
    

    3.由数字、26个英文字母或下划线组成的字符串

    ^\w+$
    

    4.校验E-Mail地址

    同密码一样,下面是E-mail地址合规性的正则检查语句。

    [\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\w](?:[\w-]*[\w])?\.)+[\w](?:[\w-]*[\w])?
    

    5.校验身份证号码

    下面是身份证号码的正则校验。15或18位。

    15位:

    ^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$
    

    18位:

    ^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$
    

    6.校验日期

    “yyyy-mm-dd“格式的日期校验,已考虑平闰年。

    ^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$
    

    7.校验金额

    金额校验,精确到2位小数。

    ^[0-9]+(.[0-9]{2})?$
    

    8.校验手机号

    手机号以13、14、15、 17、18开头,九个 \d 数字字符

    ^1[34578]\\d{9}$
    

    9.判断IE的版本

    IE目前还没被完全取代,很多页面还是需要做版本兼容,下面是IE版本检查的表达式。

    ^.*MSIE[5-8](?:\.[0-9]+)?(?!.*Trident\/[5-9]\.0).*$
    

    10.校验IP-v4地址

    IP4正则语句。

    \b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b
    

    11.校验IP-v6地址

    IP6正则语句。

    (([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))
    

    12.检查URL的前缀

    应用开发中很多时候需要区分请求是HTTPS还是HTTP,通过下面的表达式可以取出一个url的前缀然后再逻辑判断。

    if(!s.match(/^[a-zA-Z]+:\/\//))
    {
    s='http://'+s;
    }
    

    13.提取URL链接

    下面的这个表达式可以筛选出一段文本中的URL。

    ^(f|ht){1}(tp|tps):\/\/([\w-]+\.)+[\w-]+(\/[\w-./?%&=]*)?
    

    14.文件路径及扩展名校验

    验证windows下文件路径和扩展名(下面的例子中为.txt文件)

    ^([a-zA-Z]\:|\\)\\([^\\]+\\)*[^\/:*?"<>|]+\.txt(l)?$
    

    15.提取ColorHexCodes

    有时需要抽取网页中的颜色代码,可以使用下面的表达式。

    ^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$
    

    16.提取网页图片

    假若你想提取网页中所有图片信息,可以利用下面的表达式。

    \]*[src]*=*[\"\']{0,1}([^\"\'\>]*)
    

    17.提取页面超链接

    提取html中的超链接。

    (]*)(href="https?:\/\/)((?!(?:(?:www\.)?'.implode('|(?:www\.)?',$follow_list).'))[^"]+)"((?!.*\brel=)[^>]*)(?:[^>]*)>
    

    18.查找CSS属性

    通过下面的表达式,可以搜索到相匹配的CSS属性。

    ^\s*[a-zA-Z\-]+\s*[:]{1}\s[a-zA-Z0-9\s.#]+[;]{1}
    

    19.抽取注释

    如果你需要移除HMTL中的注释,可以使用如下的表达式。

    <br>
    

    20.匹配HTML标签

    通过下面的表达式可以匹配出HTML中的标签属性。

    <\/?\w+((\s+\w+(\s*=\s*(?:".*?"|'.*?'|[\^'">\s]+))?)+\s*|\s*)\/?>
    

    正则表达式简单说明

    /**
     *  语法:
     .       匹配除换行符以外的任意字符
     \w      匹配字母或数字或下划线或汉字
     \s      匹配任意的空白符
     \d      匹配数字
     \b      匹配单词的开始或结束
     ^       匹配字符串的开始
     $       匹配字符串的结束
     *       重复零次或更多次
     +       重复一次或更多次
     ?       重复零次或一次
     {n} 	重复n次
     {n,} 	重复n次或更多次
     {n,m} 	重复n到m次
     \W      匹配任意不是字母,数字,下划线,汉字的字符
     \S      匹配任意不是空白符的字符
     \D      匹配任意非数字的字符
     \B      匹配不是单词开头或结束的位置
     [^x] 	匹配除了x以外的任意字符
     [^aeiou]匹配除了aeiou这几个字母以外的任意字符
     *?      重复任意次,但尽可能少重复
     +?      重复1次或更多次,但尽可能少重复
     ??      重复0次或1次,但尽可能少重复
     {n,m}? 	重复n到m次,但尽可能少重复
     {n,}? 	重复n次以上,但尽可能少重复
     \a      报警字符(打印它的效果是电脑嘀一声)
     \b      通常是单词分界位置,但如果在字符类里使用代表退格
     \t      制表符,Tab
     \r      回车
     \v      竖向制表符
     \f      换页符
     \n      换行符
     \e      Escape
     \0nn 	ASCII代码中八进制代码为nn的字符
     \xnn 	ASCII代码中十六进制代码为nn的字符
     \unnnn 	Unicode代码中十六进制代码为nnnn的字符
     \cN 	ASCII控制字符。比如\cC代表Ctrl+C
     \A      字符串开头(类似^,但不受处理多行选项的影响)
     \Z      字符串结尾或行尾(不受处理多行选项的影响)
     \z      字符串结尾(类似$,但不受处理多行选项的影响)
     \G      当前搜索的开头
     \p{name} 	Unicode中命名为name的字符类,例如\p{IsGreek}
     (?>exp) 	贪婪子表达式
     (?<x>-<y>exp) 	平衡组
     (?im-nsx:exp) 	在子表达式exp中改变处理选项
     (?im-nsx)       为表达式后面的部分改变处理选项
     (?(exp)yes|no) 	把exp当作零宽正向先行断言,如果在这个位置能匹配,使用yes作为此组的表达式;否则使用no
     (?(exp)yes) 	同上,只是使用空表达式作为no
     (?(name)yes|no) 如果命名为name的组捕获到了内容,使用yes作为表达式;否则使用no
     (?(name)yes) 	同上,只是使用空表达式作为no
     
     捕获
     (exp)               匹配exp,并捕获文本到自动命名的组里
     (?<name>exp)        匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp)
     (?:exp)             匹配exp,不捕获匹配的文本,也不给此分组分配组号
     零宽断言
     (?=exp)             匹配exp前面的位置
     (?<=exp)            匹配exp后面的位置
     (?!exp)             匹配后面跟的不是exp的位置
     (?<!exp)            匹配前面不是exp的位置
     注释
     (?#comment)         这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读
     
     *  表达式:\(?0\d{2}[) -]?\d{8}
     *  这个表达式可以匹配几种格式的电话号码,像(010)88886666,或022-22334455,或02912345678等。
     *  我们对它进行一些分析吧:
     *  首先是一个转义字符\(,它能出现0次或1次(?),然后是一个0,后面跟着2个数字(\d{2}),然后是)或-或空格中的一个,它出现1次或不出现(?),
     *  最后是8个数字(\d{8})
     */
    

    验证数字的正则表达式集

    验证数字:^[0-9]*$
    验证n位的数字:^\d{n}$
    验证至少n位数字:^\d{n,}$
    验证m-n位的数字:^\d{m,n}$
    验证零和非零开头的数字:^(0|[1-9][0-9]*)$
    验证有两位小数的正实数:^[0-9]+(.[0-9]{2})?$
    验证有1-3位小数的正实数:^[0-9]+(.[0-9]{1,3})?$
    验证非零的正整数:^\+?[1-9][0-9]*$
    验证非零的负整数:^\-[1-9][0-9]*$
    验证非负整数(正整数 + 0)  ^\d+$
    验证非正整数(负整数 + 0)  ^((-\d+)|(0+))$
    验证长度为3的字符:^.{3}$
    验证由26个英文字母组成的字符串:^[A-Za-z]+$
    验证由26个大写英文字母组成的字符串:^[A-Z]+$
    验证由26个小写英文字母组成的字符串:^[a-z]+$
    验证由数字和26个英文字母组成的字符串:^[A-Za-z0-9]+$
    验证由数字、26个英文字母或者下划线组成的字符串:^\w+$
    验证用户密码:^[a-zA-Z]\w{5,17}$ 正确格式为:以字母开头,长度在6-18之间,只能包含字符、数字和下划线。
    验证是否含有 ^%&',;=?$\" 等字符:[^%&',;=?$\x22]+
    验证汉字:^[\u4e00-\u9fa5],{0,}$
    验证Email地址:^\w+[-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
    验证InternetURL:^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$ ;^[a-zA-z]+://(w+(-w+)*)(.(w+(-w+)*))*(?S*)?$
    验证电话号码:^(\(\d{3,4}\)|\d{3,4}-)?\d{7,8}$:--正确格式为:XXXX-XXXXXXX,XXXX-XXXXXXXX,XXX-XXXXXXX,XXX-XXXXXXXX,XXXXXXX,XXXXXXXX。
    验证身份证号(15位或18位数字):^\d{15}|\d{}18$
    验证一年的12个月:^(0?[1-9]|1[0-2])$ 正确格式为:“01”-“09”和“1”“12”
    验证一个月的31天:^((0?[1-9])|((1|2)[0-9])|30|31)$    正确格式为:01、09和1、31。
    整数:^-?\d+$
    非负浮点数(正浮点数 + 0):^\d+(\.\d+)?$
    正浮点数   ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$
    非正浮点数(负浮点数 + 0) ^((-\d+(\.\d+)?)|(0+(\.0+)?))$
    负浮点数  ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$
    浮点数  ^(-?\d+)(\.\d+)?
    

    正则表达式在线测试工具

    1.regex101
    2.正则表达式测试器
    3.Javascript正则表达式在线测试工具

    参考资料及推荐阅读:
    1.正则表达式语言 - 快速参考(中文)
    2.快速学习指南(英文)
    3.专业的正则表达式教学网站(英文)
    4.正则表达式30分钟入门教程
    5.知道这20个正则表达式,能让你少写1,000行代码

    展开全文
  • 正则表达式-创建正则表达式

    千次阅读 2016-10-21 18:56:35
    正则表达式就是一个字符模式。和String对象类似,在JavaScript中正则表达式也是一个对象,它主要用于字符串的模式匹配。创建正则表达式有两种方式:隐式创建(文字量方法)和显示创建(使用构造函数)。  隐式...
  • 正则表达式正则表达式语言来建立,正则表达式语言是用来完成匹配特殊的串的一种特殊语言。Regexp关键字告诉MySQL后面所跟的东西作为正则表达式处理。以下使用student、courses、classes表查询student表image....
  • 常用js正则表达式 Javascript正则表达式实战手册

    千次阅读 多人点赞 2018-08-13 00:22:33
    最近做了几个项目,发现正则表达式用得越来越多了。我个人的习惯是,能通过查手册获取的东西绝不死记硬背,虽然大多数技术网站都搜罗了一堆Javascript正则表达式的用法,但我还是想整理一份更有实战意义的手册。说白...
  • 正则表达式就是一个字符模式。和String对象类似,在JavaScript中正则表达式也是一个对象,它主要用于字符串的模式匹配。创建正则表达式有两种方式:隐式创建(文字量方法)和显示创建(使用构造函数)。隐式创建正则...
  • Oracle 正则表达式以及常用正则函数

    万次阅读 2021-07-09 11:48:40
    Oracle 正则表达式以及常用函数正则表达式简介正则表达式基础Oracle常用函数 正则表达式简介 菜鸟教程 练习网站1 练习网站2 练习网站3 练习网站4 软件下载 什么是正则表达式? 正则表达式,又称规则表达式。(英语...
  • 正则表达式分组 定义 在正则表达式中,以()建立正则表达式的内部分组,子组是正则表达式的一部分,可以作为内部整体操作对象。 备注:当我们的正则表达式中存在子组时,就不能用findall(),则要用search(). 作用 ①...
  • 正则表达式与Python在了解了正则表达式的相关知识之后,开始查看Python当前如何通过使用re模块来支持正则表达式,re模块在很早之前就引入了,用于替换那些已过时的regex模块和regsub模块——这两个模块在Python2.5版...
  • 在Linux Shell 编程中,我们常需要用到 正则表达式 进行 文件的匹配在本篇文章中,我们对Linux shell 中的正则表达式 做一个总结,方便之后的shell 编写。参考文章:shell编程之正则表达式...
  • 1、一个正则表达式,只含有汉字、数字、字母、下划线不能以下划线开头和结尾: ^(?!_)(?!.*?_$)[a-zA-Z0-9_\u4e00-\u9fa5]+$ 其中: ^ 与字符串开始的地方匹配 (?!_) 不能以_开头 (?!.*?_$) 不能以
  • 由于工作中用到正则表达式不多,一直没有好好学习正则表达式。在网上找到了原版的精通正则表达式(第三版)电子版,抽时间详细学习,下面对最近学到的做个总结。 最近在进行安全检查漏洞修补,在做XSS攻击过滤器时,...
  • 如果你不熟悉这个术语,那么“正则表达式”(Regular Expression)就是一个字符构成的串,它定义了一个用来搜索匹配字符串的模式。  正则表达式30分钟入门教程  常用正则表达式  许多语言,包括...
  • 相关阅读:正则表达式语法一个正则表达式就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式...
  • 使用正则表达式也并非一定要创建模式对象,然后调用它的匹配方法。因为,re 模块同时还提供了一些全局函数,例如 match(),search(),findall(),sub() 等等。这些函数的第一个参数是正则表达式字符串,其他参数跟...
  • 本节书摘来自异步社区《正则表达式经典实例(第2版)》一书中的第1章,第1.1节,作者: 【美】Jan Goyvaerts , Steven Levithan著,更多章节内容可以访问云栖社区“异步社区”公众号查看 第 1 章 正则表达式简介 在...
  • 这篇文章主要介绍了正则表达式环视概念与用法,具体分析了环视的概念、分类、使用方法及相关注意事项,需要的朋友可以参考下本文实例讲述了正则表达式环视概念与用法。分享给大家供大家参考,具体如下:1.环视又叫预...
  • Python ----》 re模块 处理正则表达式 re.findall(pattern,string) 功能 : 使用正则表达式匹配字符串 参数 : pattern 正则表达式  string 目标字符串 返回值 : 一个列表 匹配到的所有内容 元字符 1、元字符...
  • scala 正则表达式匹配 前言 这是面向初学者的Scala教程的第5部分。 该博客上还有其他文章,您可以在我正在为其创建的计算语言学课程的链接页面上找到这些链接和其他资源。 此外,您可以在“ JCG Java教程”页面上...
  • 大家好,我们继续Python“正则表达式”的学习,今天的主要内容是re模块中各个方法的介绍,先做个预告,有以下几种方法。大家准备好了吗,开始,走起。1、match方法match方法用于尝试从字符串的起始位置匹配一个正则...
  • Perl正则表达式 2. 用正则表达式进行匹配 2.1 用 m// 进行匹配 到目前为止,我们都是讲正则表达式的内容写在一对斜线内,如/fred/。但其实这是 m// 的简写,其中m代表match,和之前看到的 qw// 类似,我么可以自行...
  • [正则表达式]非常经典的正则表达式作者:Mikel 日期:2008-11-04 前言: 半年前我对正则表达式产生了兴趣,在网上查找过不少资料,看过不少的教程,最后在使用一个正则表达式工具RegexBuddy时发现他的教程写的非常好,...
  • 如果你曾经用过Perl或任何其他内建正则表达式支持的语言,你一定知道用正则表达式处理文本和匹配模式是多么简单。如果你不熟悉这个术语,那么“正则表达式”(Regular Expression)就是一个字符构成的串,它定义了一...
  • L7-fitler 正则表达式简介   正则表达式源自于对人类神经系统如何工作的早期研究,Warren McCulloch 和 Walter Pitts 这两位神经生理学家研究出一种数学方式来描述这些神经网络。1956 年,一位叫 Stephen ...
  • mysql 提供的模式匹配的其他类型是使用扩展正则表达式。 当你对这类模式进行匹配测试时,使用REGEXP和NOT REGEXP操作符(或RLIKE和NOT RLIKE,它们是同义词)。 扩展正则表达式的一些字符是: “.”匹配任何单个的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 110,635
精华内容 44,254
关键字:

名字的正则表达式