1. 程式人生 > >正則表達式總結regex

正則表達式總結regex

整體 成功 貪婪匹配 des string tag 頁面 中轉 除了


layout: post
title: 正則表達式總結regex
tags:

  • regex
    categories:
  • notes
    description: 正則表達式是用於進行文本匹配的工具 [\u4e00-\u9fa5] 匹配中文漢字
    ---

總結正則表達式

http://deerchao.net/tutorials/regex/regex-1.htm 這是我學習的網站

正則表達式是用於進行文本匹配的工具

[\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);

正則表達式總結regex