正則表達式總結regex
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