主頁 > 前端設計 > 正則運算式

正則運算式

2020-09-14 10:47:39 前端設計

參考:https://baike.baidu.com/item/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F/1700215?fr=aladdin

 

是對字串進行操作的一種邏輯公式;應用物件是文本,

正則運算式可以用來判斷用戶名輸入的格式等是否正確,預防機制,避免錯誤格式的資料直接傳送到后端才進行判斷排除

元字符描述
\將下一個字符標記符、或一個向后參考、或一個八進制轉義符,例如,“\n”匹配\n,“\n”匹配換行符,序列“\”匹配“\”而“(”則匹配“(”,即相當于多種編程語言中都有的“轉義字符”的概念,
^匹配字串的開頭,如果設定了RegExp物件的Multiline屬性,^也表示匹配行的開始處,必須為5位到12位數字時::^\d{5,12}$,
$匹配字串的結尾,如果設定了RegExp物件的Multiline屬性,$也表示匹配行的結束處,
.*表示數量,指前面的內容可以重復出現無數次,\bhi\b. *\blucky\b表示:先是一個單詞hi,然后是任意個任意字符(但不能是換行),最后是Lucy這個單詞,重復0次或更多次
+重復一次或更多次,
?匹配前面的子運算式零次或一次,例如,“do(es)?”可以匹配“do”或“does”,?等價于{0,1},
{n}匹配確定的n次,
{n,}重復n次或更多次,
{n,m}重復n到m次,請注意在逗號和兩個數之間不能有空格,
?當該字符緊跟在任何一個其他限制符(,+,?,{n},{n,},{n,m*})后面時,匹配模式是非貪婪的,非貪婪模式盡可能少地匹配所搜索的字串,而默認的貪婪模式則盡可能多地匹配所搜索的字串,例如,對于字串“oooo”,“o+”將盡可能多地匹配“o”,得到結果[“oooo”],而“o+?”將盡可能少地匹配“o”,得到結果 ['o', 'o', 'o', 'o']
.點匹配除“\n”和"\r"之外的任何單個字符,要匹配包括“\n”和"\r"在內的任何字符,請使用像“[\s\S]”的模式,
(pattern)匹配pattern并獲取這一匹配,所獲取的匹配可以從產生的Matches集合得到,在VBScript中使用SubMatches集合,在JScript中則使用$0…$9屬性,要匹配圓括號字符,請使用“(”或“)”,
(?:pattern)非獲取匹配,匹配pattern但不獲取匹配結果,不進行存盤供以后使用,這在使用或字符“(|)”來組合一個模式的各個部分時很有用,例如“industr(?:y|ies)”就是一個比“industry|industries”更簡略的運算式,
(?=pattern)非獲取匹配,正向肯定預查,在任何匹配pattern的字串開始處匹配查找字串,該匹配不需要獲取供以后使用,例如,“Windows(?=95|98|NT|2000)”能匹配“Windows2000”中的“Windows”,但不能匹配“Windows3.1”中的“Windows”,預查不消耗字符,也就是說,在一個匹配發生后,在最后一次匹配之后立即開始下一次匹配的搜索,而不是從包含預查的字符之后開始,
(?!pattern)非獲取匹配,正向否定預查,在任何不匹配pattern的字串開始處匹配查找字串,該匹配不需要獲取供以后使用,例如“Windows(?!95|98|NT|2000)”能匹配“Windows3.1”中的“Windows”,但不能匹配“Windows2000”中的“Windows”,
(?<=pattern)非獲取匹配,反向肯定預查,與正向肯定預查類似,只是方向相反,例如,“(?<=95|98|NT|2000)Windows”能匹配“2000Windows”中的“Windows”,但不能匹配“3.1Windows”中的“Windows”,*python的正則運算式沒有完全按照正則運算式規范實作,所以一些高級特性建議使用其他語言如java、scala等
(?<!patte_n)非獲取匹配,反向否定預查,與正向否定預查類似,只是方向相反,例如“(?<!95|98|NT|2000)Windows”能匹配“3.1Windows”中的“Windows”,但不能匹配“2000Windows”中的“Windows”,*python的正則運算式沒有完全按照正則運算式規范實作,所以一些高級特性建議使用其他語言如java、scala等
x|y匹配x或y,例如,“z|food”能匹配“z”或“food”(此處請謹慎),“[z|f]ood”則匹配“zood”或“food”,
[xyz]字符集合,匹配所包含的任意一個字符,例如,“[abc]”可以匹配“plain”中的“a”,
[^xyz]負值字符集合,匹配未包含的任意字符,例如,“abc”可以匹配“plain”中的“plin”任一字符,
[a-z]字符范圍,匹配指定范圍內的任意字符,例如,“[a-z]”可以匹配“a”到“z”范圍內的任意小寫字母字符,注意:只有連字符在字符組內部時,并且出現在兩個字符之間時,才能表示字符的范圍; 如果出字符組的開頭,則只能表示連字符本身.
[^a-z]負值字符范圍,匹配任何不在指定范圍內的任意字符,例如,“a-z”可以匹配任何不在“a”到“z”范圍內的任意字符,
\b匹配一個單詞的邊界,開始或結束,代表單詞的分界處
\B匹配非單詞開頭或結尾的邊界,“er\B”能匹配“verb”中的“er”,但不能匹配“never”中的“er”,
\cx匹配由x指明的控制字符,例如,\cM匹配一個Control-M或回車符,x的值必須為A-Z或a-z之一,否則,將c視為一個原義的“c”字符,
\d匹配一個數字字符,[0-9] 匹配這樣的字串:以0開頭,然后是兩個數字,然后是一個連字號“-”,最后是8個數字=======: 0\d{2}-\d{8} ;0\d\d-\d\d\d\d\d\d\d\d,
\D匹配任意非數字的字符,等價于0-9,grep要加上-P,perl正則支持
\f匹配一個換頁符,等價于\x0c和\cL,
\n匹配一個換行符,等價于\x0a和\cJ,
\r匹配一個回車符,等價于\x0d和\cM,
\s匹配任何空白符,包括空格、制表符、換頁符等等,等價于[ \f\n\r\t\v],
\S匹配任何非空白符的字符,等價于 \f\n\r\t\v
\t匹配一個制表符,等價于\x09和\cI,
\v匹配一個垂直制表符,等價于\x0b和\cK,
\w匹配數字或字母或下劃線或漢字,[a-z0-9A-Z_] 可以理解為表示單詞
\W匹配任何非數字字母下劃線漢字的字符,
\xn匹配n,其中n為十六進制轉義值,十六進制轉義值必須為確定的兩個數字長,例如,“\x41”匹配“A”,“\x041”則等價于“\x04&1”,正則運算式中可以使用ASCII編碼,
*num*匹配num,其中num是一個正整數,對所獲取的匹配的參考,例如,“(.)\1”匹配兩個連續的相同字符,
*n*標識一個八進制轉義值或一個向后參考,如果*n之前至少n個獲取的子運算式,則n為向后參考,否則,如果n為八進制數字(0-7),則n*為一個八進制轉義值,
*nm*標識一個八進制轉義值或一個向后參考,如果*nm之前至少有nm個獲得子運算式,則nm為向后參考,如果*nm之前至少有n個獲取,則n為一個后跟文字m的向后參考,如果前面的條件都不滿足,若nm均為八進制數字(0-7),則*nm將匹配八進制轉義值nm*,
*nml*如果n為八進制數字(0-7),且ml均為八進制數字(0-7),則匹配八進制轉義值nml
\un匹配n,其中n是一個用四個十六進制數字表示的Unicode字符,例如,\u00A9匹配著作權符號(©),
\p{P}小寫 p 是 property 的意思,表示 Unicode 屬性,用于 Unicode 正運算式的前綴,中括號內的“P”表示Unicode 字符集七個字符屬性之一:標點字符,其他六個屬性:L:字母;M:標記符號(一般不會單獨出現);Z:分隔符(比如空格、換行等);S:符號(比如數學符號、貨幣符號等);N:數字(比如阿拉伯數字、羅馬數字等);C:其他字符,*注:此語法部分語言不支持,例:javascript,
<>匹配詞(word)的開始(<)和結束(>),例如正則運算式<the>能夠匹配字串"for the wise"中的"the",但是不能匹配字串"otherwise"中的"the",注意:這個元字符不是所有的軟體都支持的,
( )將( 和 ) 之間的運算式定義為“組”(group),并且將匹配這個運算式的字符保存到一個臨時區域(一個正則運算式中最多可以保存9個),它們可以用 \1 到\9 的符號來參考,
|將兩個匹配條件進行邏輯“或”(or)運算,例如正則運算式(him|her) 匹配"it belongs to him"和"it belongs to her",但是不能匹配"it belongs to them.",注意:這個元字符不是所有的軟體都支持的,

 

https://sourceforge.net/projects/regextester/ regex tester下載地址

 

\(?0\d{2}[) -]?\d{8} \( --------表示轉義字符; ?0-----表示前面的括號出現0次或1次; \d{2}-----表示兩個數字; [)- ]? ---表示括號或-或空格,出現0次或1次; \d{8}-----表示8個數字,

 

分枝條件是從左到右地測驗每個條件的,如果滿足了某個分枝的話,就不會再去管其他的條件了,

 

后向參考:用于重復搜索前面某個分組匹配的文本

 

指定一個子運算式的組名,請使用這樣的語法:(?<Word>\w+)(或者把尖括號換成'也行:(?'Word'\w+)),這樣就把\w+的組名指定為Word了

分類代碼/語法說明
捕獲(exp)匹配exp,并捕獲文本到自動命名的組里
(?<name>exp)匹配exp,并捕獲文本到名稱為name的組里,也可以寫成(?'name'exp) 
(?:exp)匹配exp,不捕獲匹配的文本,也不給此分組分配組號 
零寬斷言(?=exp)匹配exp前面的位置
(?<=exp)匹配exp后面的位置 
(?!exp)匹配后面跟的不是exp的位置 
(?<!exp)匹配前面不是exp的位置 
注釋(?#comment)這種型別的分組不對正則運算式的處理產生任何影響,用于提供注釋讓人閱讀

 

:(?<=<(\w+)>).*(?=<\/\1>)

尚未詳細討論的語法

代碼/語法說明
\a報警字符(列印它的效果是電腦嘀一聲)
\b通常是單詞分界位置,但如果在字符類里使用代表退格
\t制表符,Tab
\r回車
\v豎向制表符
\f換頁符
\n換行符
\eEscape
\0nnASCII代碼中八進制代碼為nn的字符
\xnnASCII代碼中十六進制代碼為nn的字符
\unnnnUnicode代碼中十六進制代碼為nnnn的字符
\cNASCII控制字符,比如\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

 

 

 

 常用的正則運算式主要有以下幾種:  匹配中文字符的正則運算式: [\u4e00-\u9fa5]  “\u4e00 ”  一  獲取日期正則運算式:\d{4}[年|\-|\.]\d{1,2}[月|\-|\.]\d{1,2}日?  匹配雙位元組字符(包括漢字在內):[^\x00-\xff]  匹配空白行的正則運算式:\n\s*\r       評注:可以用來洗掉空白行  匹配HTML標記的正則運算式:<(\S*?)[^>]*>.*?</>|<.*? />  匹配首尾空白字符的正則運算式:^\s*|\s*$      評注:可以用來洗掉行首行尾的空白字符(包括空格、制表符、換頁符等等),非常有用的運算式  匹配Email地址的正則運算式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*              評注:表單驗證時很實用  匹配網址URL的正則運算式:[a-zA-z]+://[^\s]*  匹配帳號是否合法(字母開頭,允許5-16位元組,允許字母數字下劃線):^[a-zA-Z][a-zA-Z0-9_]{4,15}$          評注:表單驗證時很實用  匹配國內電話號碼:\d{4}-\d{7}|\d{3}-\d{8}      評注:匹配形式如 0511-4405222 或 021-87888822         ^((1[3,5,8][0-9])|(14[5,7])|(17[0,6,7,8])|(19[7]))\\d{8}$  匹配騰訊QQ號:[1-9][0-9]\{4,\}           評注:騰訊QQ號從10000開始  匹配中國郵政編碼:[1-9]\d(?!\d)         評注:中國郵政編碼為6位數字  匹配身份證:\d{17}[\d|X]|\d{15}  評注:中國的身份證為15位或18位  匹配ip地址:((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?),  評注:提取ip地址時有用  
  匹配特定數字:  ^[1-9]\d*$ //匹配正整數  ^-[1-9]\d*$ //匹配負整數  ^-?[1-9]\d*$ //匹配整數  ^[1-9]\d*|0$ //匹配非負整數(正整數 + 0)  ^-[1-9]\d*|0$ //匹配非正整數(負整數 + 0)  ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ //匹配正浮點數  ^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ //匹配負浮點數  ^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$ //匹配浮點數  ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$ //匹配非負浮點數(正浮點數 + 0)  ^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$ //匹配非正浮點數(負浮點數 + 0)  匹配特定字串:  ^[A-Za-z]+$ //匹配由26個英文字母組成的字串  ^[A-Z]+$ //匹配由26個英文字母的大寫組成的字串  ^[a-z]+$ //匹配由26個英文字母的小寫組成的字串  ^[A-Za-z0-9]+$ //匹配由數字和26個英文字母組成的字串  ^\w+$ //匹配由數字、26個英文字母或者下劃線組成的字串

 

轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/34058.html

標籤:HTML5

上一篇:關于thymeleaf中th:if的使用

下一篇:HTTP Referer

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • vue移動端上拉加載

    可能做得過于簡單或者比較low,請各位大佬留情,一起探討技術 ......

    uj5u.com 2020-09-10 04:38:07 more
  • 優美網站首頁,頂部多層導航

    一個個人用的瀏覽器首頁,可以把一下常用的網站放在這里,平常打開會比較方便。 第一步,HTML代碼 <script src=https://www.cnblogs.com/szharf/p/"js/jquery-3.4.1.min.js"></script> <div id="navigate"> <ul> <li class="labels labels_1"> ......

    uj5u.com 2020-09-10 04:38:47 more
  • 頁面為要加<!DOCTYPE html>

    最近因為寫一個js函式,需要用到$(window).height(); 由于手寫demo的時候,過于自信,其實對前端方面的認識也不夠體系,用文本檔案直接敲出來的html代碼,第一行沒有加上<!DOCTYPE html> 導致了$(window).height();的結果直接是整個document的高 ......

    uj5u.com 2020-09-10 04:38:52 more
  • WordPress網站程式手動升級要做好資料備份

    WordPress博客網站程式在進行升級前,必須要做好網站資料的備份,這個問題良家佐言是遇見過的;在剛開始接觸WordPress博客程式的時候,因為升級問題和博客網站的修改的一些嘗試,良家佐言是吃盡了苦頭。因為購買的是西部數碼的空間和域名,每當佐言把自己的WordPress博客網站搞到一塌糊涂的時候 ......

    uj5u.com 2020-09-10 04:39:30 more
  • WordPress程式不能升級為5.4.2版本的原因

    WordPress是一款個人博客系統,受到英文博客愛好者和中文博客愛好者的追捧,并逐步演化成一款內容管理系統軟體;它是使用PHP語言和MySQL資料庫開發的,用戶可以在支持PHP和MySQL資料庫的服務器上使用自己的博客。每一次WordPress程式的更新,就會牽動無數WordPress愛好者的心, ......

    uj5u.com 2020-09-10 04:39:49 more
  • 使用CSS3的偽元素進行首字母下沉和首行改變樣式

    網頁中常見的一種效果,首字改變樣式或者首行改變樣式,效果如下圖。 代碼: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, ......

    uj5u.com 2020-09-10 04:40:09 more
  • 關于a標簽的講解

    什么是a標簽? <a> 標簽定義超鏈接,用于從一個頁面鏈接到另一個頁面。 <a> 元素最重要的屬性是 href 屬性,它指定鏈接的目標。 a標簽的語法格式:<a href=https://www.cnblogs.com/summerxbc/p/"指定要跳轉的目標界面的鏈接">需要展示給用戶看見的內容</a> a標簽 在所有瀏覽器中,鏈接的默認外觀如下: 未被訪問的鏈接帶 ......

    uj5u.com 2020-09-10 04:40:11 more
  • 前端輪播圖

    在需要輪播的頁面是引入swiper.min.js和swiper.min.css swiper.min.js地址: 鏈接:https://pan.baidu.com/s/15Uh516YHa4CV3X-RyjEIWw 提取碼:4aks swiper.min.css地址 鏈接:https://pan.b ......

    uj5u.com 2020-09-10 04:40:13 more
  • 如何設定html中的背景圖片(全屏顯示,且不拉伸)

    1 <style>2 body{background-image:url(https://uploadbeta.com/api/pictures/random/?key=BingEverydayWallpaperPicture); 3 background-size:cover;background ......

    uj5u.com 2020-09-10 04:40:16 more
  • Java學習——HTML詳解(上)

    HTML詳解 初識HTML Hyper Text Markup Language(超文本標記語言) 1 <!--DOCTYPE:告訴瀏覽器我們要使用什么規范--> 2 <!DOCTYPE html> 3 <html lang="en"> 4 <head> 5 <!--meta 描述性的標簽,描述一些 ......

    uj5u.com 2020-09-10 04:40:33 more
最新发布
  • 我的第一個NPM包:panghu-planebattle-esm(胖虎飛機大戰)使用說明

    好家伙,我的包終于開發完啦 歡迎使用胖虎的飛機大戰包!! 為你的主頁添加色彩 這是一個有趣的網頁小游戲包,使用canvas和js開發 使用ES6模塊化開發 效果圖如下: (覺得圖片太sb的可以自己改) 代碼已開源!! Git: https://gitee.com/tang-and-han-dynas ......

    uj5u.com 2023-04-20 07:59:23 more
  • 生產事故-走近科學之消失的JWT

    入職多年,面對生產環境,盡管都是小心翼翼,慎之又慎,還是難免捅出簍子。輕則滿頭大汗,面紅耳赤。重則系統停擺,損失資金。每一個生產事故的背后,都是寶貴的經驗和教訓,都是專案成員的血淚史。為了更好地防范和遏制今后的各類事故,特開此專題,長期更新和記錄大大小小的各類事故。有些是親身經歷,有些是經人耳傳口授 ......

    uj5u.com 2023-04-18 07:55:04 more
  • 記錄--Canvas實作打飛字游戲

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 打開游戲界面,看到一個畫面簡潔、卻又富有挑戰性的游戲。螢屏上,有一個白色的矩形框,里面不斷下落著各種單詞,而我需要迅速地輸入這些單詞。如果我輸入的單詞與螢屏上的單詞匹配,那么我就可以獲得得分;如果我輸入的單詞錯誤或者時間過長,那么我就會輸 ......

    uj5u.com 2023-04-04 08:35:30 more
  • 了解 HTTP 看這一篇就夠

    在學習網路之前,了解它的歷史能夠幫助我們明白為何它會發展為如今這個樣子,引發探究網路的興趣。下面的這張圖片就展示了“互聯網”誕生至今的發展歷程。 ......

    uj5u.com 2023-03-16 11:00:15 more
  • 藍牙-低功耗中心設備

    //11.開啟藍牙配接器 openBluetoothAdapter //21.開始搜索藍牙設備 startBluetoothDevicesDiscovery //31.開啟監聽搜索藍牙設備 onBluetoothDeviceFound //30.停止監聽搜索藍牙設備 offBluetoothDevi ......

    uj5u.com 2023-03-15 09:06:45 more
  • canvas畫板(滑鼠和觸摸)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>canves</title> <style> #canvas { cursor:url(../images/pen.png),crosshair; } #canvasdiv{ bo ......

    uj5u.com 2023-02-15 08:56:31 more
  • 手機端H5 實作自定義拍照界面

    手機端 H5 實作自定義拍照界面也可以使用 MediaDevices API 和 <video> 標簽來實作,和在桌面端做法基本一致。 首先,使用 MediaDevices.getUserMedia() 方法獲取攝像頭媒體流,并將其傳遞給 <video> 標簽進行渲染。 接著,使用 HTML 的 < ......

    uj5u.com 2023-01-12 07:58:22 more
  • 記錄--短視頻滑動播放在 H5 下的實作

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 短視頻已經無數不在了,但是主體還是使用 app 來承載的。本文講述 H5 如何實作 app 的視頻滑動體驗。 無聲勝有聲,一圖頂百辯,且看下圖: 網址鏈接(需在微信或者手Q中瀏覽) 從上圖可以看到,我們主要實作的功能也是本文要講解的有: ......

    uj5u.com 2023-01-04 07:29:05 more
  • 一文讀懂 HTTP/1 HTTP/2 HTTP/3

    從 1989 年萬維網(www)誕生,HTTP(HyperText Transfer Protocol)經歷了眾多版本迭代,WebSocket 也在期間萌芽。1991 年 HTTP0.9 被發明。1996 年出現了 HTTP1.0。2015 年 HTTP2 正式發布。2020 年 HTTP3 或能正... ......

    uj5u.com 2022-12-24 06:56:02 more
  • 【HTML基礎篇002】HTML之form表單超詳解

    ??一、form表單是什么

    ??二、form表單的屬性

    ??三、input中的各種Type屬性值

    ??四、標簽 ......

    uj5u.com 2022-12-18 07:17:06 more