正則基礎

http://www.ipc.me/regular_expression_07681.html
文章錯誤:
?? ?1 字符集的一些應用 第二個正則少了一個左方括號。
?? ?2 字符集的元字符 /[]x]/中的第一個]左邊少了一個轉義符,在這種情況下轉義符還是不能省略的。

擴展
?? ?1 回車符 換行符 http://www.cnblogs.com/yunf/archive/2011/04/20/2021830.html


表達式引擎
?? ?正則表達式引擎室一種可以處理正則表達式的軟件,通常是大程序的一部分,不用的表達式互不兼容(JDK .NET)。
?? ?兩種類型:文本導向(text-dereced/DFA) 和 正則導向 (regex-directed/NFA)
?? ?主流是NFA,因為(惰性/lazy quantifiers)以及(反向引用/backreferences)只能在正則NFA中實現。
?? ?分辨兩種引擎的方法:
?? ??? ?/reg|reg not/ 如果匹配到reg,那么是正則導向;如果是reg not,是文本導向。
?? ??? ?因為正則導向引擎總是返回最左邊的匹配,猴急。
?? ?
特殊字符(11)
?? ?[ ] ()???? ^? $?? +?????? \ |???? . ?
?? ?2個括號??? 4? 6?? 12???? (\)??? shift左邊2個
?? ?
?? ?在一些預編譯(C++)中,\ 數量加倍

不顯示的字符
?? ?\t tab(0x09)
?? ?\r 回車(0x0D)
?? ?\n 換行(0x0A)
?? ?顯示的字符,是敲“ABC123”是可以看到的,那換行/回車/Tab 鍵 是看不到的。

連字符 -
?? ?可以指定范圍,如[0-9a-fxA-FX]
?? ?
反字符 [^]
?? ?q[^u]不會匹配iraq,會匹配 Iraq is a country,因為[]必須要匹配一個字符
?? ?如果你只想匹配一個q,條件是q后面有一個不是u的字符,我們可以用后面將講到的向前查看來解決?
?? ?在[]中, 有 4 個元字符需要轉義 ] \ ^ - 其他元字符不需要轉義,但是其中 2 個元字符(^-)的轉義符不是必須的
?? ?只要將他們放在一個不可能使用到他們的特殊位置,這樣子可以增加可讀性。
?? ?例如^只要不放到 [ 的后面,就可以不用轉義符。[x^] [-x]
?? ?
常用的字符集簡寫
?? ?\d 0-9?? ?取反\D
?? ?\w A-Za-z0-9 取反\W
?? ?\s 空白字符 空格符 Tab符 回車\r 換行\n? 取反 \S
?? ?
?? ?[0-9]+ 僅僅想重復匹配那個數字 向后引用?

注意貪婪
?? ??* + 都是貪婪的,會盡可能的重復前導字符。(?會盡可能匹配一次)
?? ?例子:
?? ?var reg = /<.+>/;// /<[^>]+>/ 或者 /<.+?>/
?? ?var str ='This is a <EM>first</EM> test';
?? ?console.log(str.match(reg));
?? ?表達式<.+會貪婪匹配到字符串結束(最后還有個換行符,'.'不匹配換行符,(換行符是怎么出來的?)),然后表達式的剩余?? ??? ?部分 > 去匹配換行符,匹配不成功,然后進行回溯(!!),<.+ 會丟掉匹配的最后一個字符 讓>去匹配,直到成功為止。最后?? ?停留在<EM>first</EM。匹配結果是<EM>first</EM>。
?? ?
?? ?'+'的貪婪性使得表達式匹配到最左邊的最長的匹配。
?? ?
?? ?不管是惰性匹配還是貪婪匹配,都會進行回溯,會影響效率。

?? ?. == [^\r\n](Window)不匹配換行符的歷史原因:為早期使用正則表達式的工具是基于行的。它們都是一行一行的讀入一個文件?? ??? ?,將正則表達式分別應用到每一行上去。在這些工具中,字符串是不包含新行符(\n)的(歷史)。現代的工具和語言能夠將正則?? ?表達式應用到很大的字符串甚至整個文件上去。?? ?
?? ?單行模式,將整個文件一并讀入,此時.匹配新行符,只影響.的匹配范圍。
?? ?***
?? ?多行模式和單行模式沒有什么關系,只是名字相似。
?? ?多行模式下,只影響^ 和 $ 的匹配范圍
?? ?^ 可以匹配字符串開頭(字符串的開始位置),也可以匹配行的開頭(即換行符\n之后的位置)
?? ?$ 可以匹配字符串結尾(字符串的結束位置), 也可以匹配行的結尾(即換行符\n之前的位置)

?? ?Regex.Match(“string”,”regex”,RegexOptions.SingleLine)可以激活單行模式。

?? ?var reg = /(?:0[1-9]|1[0-2])[-/.](?:0[1-9]|[1-2]\d|3[01])/;//(?:)匹配但是不獲取,經常和| 配合使用
?? ?var str ='12/01';
?? ?console.log(str.match(reg));

?? ?字符串開始和結束的錨定 (^$)
?? ?^$ 和一般的表達式符號不用,他不匹配任何字符,他會匹配字符之前或者之后的位置。
?? ?“first line\n\rsecond line”其中的 \n\r 在WINDOWS下是換行回車的標志,正則表達式引擎提供一個選項可以是擴展 '^'
?? ?
絕對錨定
?? ?\A 和 \Z 只匹配整個字符串的開始位置和結束位置,即使你使用了多行模式。

單詞邊界\b <=> \B
?? ?也是一種錨
?? ?1)在字符串的第一個字符前的位置(如果字符串的第一個字符是一個“單詞字符”)
  ?? ?2)在字符串的最后一個字符后的位置(如果字符串的最后一個字符是一個“單詞字符”)
  ?? ?3)在一個“單詞字符”和“非單詞字符”之間,其中“非單詞字符”緊跟在“單詞字符”之后
  ?? ?4) 在一個“非單詞字符”和“單詞字符”之間,其中“單詞字符”緊跟在“非單詞字符”后面
?? ?*單詞字符 指 \w == [a-zA-Z0-9]
?? ?
組()與 后向引用
?? ?()匹配后生成組,\0代表整個背匹配的結果,用\N來引用剩余的,()經常會和|配合使用,用來限制|的范圍,(?: pattern)不?? ??? ?獲取匹配結果...
?? ?<([A-Z][A-Z0-9]*)[^>]*>.*?</\1> 可以用來匹配標簽。
?? ?注意點:
?? ??? ?后向引用不能用于他自身,([abc]\1)
?? ??? ?后向引用不能用于字符集內部 (a)[\1b]
?? ??? ?當對組使用重復操作符時,緩存里后向引用內容會被不斷刷新,只保留最后匹配的內容。

模式
?? ?i 大小寫不敏感
?? ?s 單行模式
?? ?m 多行模式
?? ?(?i)te(?-i)st 能匹配TEst 原因就是?i開啟了不敏感,隨后又關閉了敏感,變得敏感了。

?? ?


?? ?
?? ?

???

轉載于:https://www.cnblogs.com/cy056/archive/2013/03/11/regExp.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/378773.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/378773.shtml
英文地址,請注明出處:http://en.pswp.cn/news/378773.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Windows Phone 7獨立存儲空間IsolatedStorage

Windows Phone 7的solatedStorage可以用來保存應用程序的數據和設置。結構圖如下 一、相關類 1.IsolatedStorageFile類 1&#xff09;描述&#xff1a;表示在獨立存儲空間中的文件和目錄。 2&#xff09;重要屬性 long AvailableFreeSpace&#xff1a;IsolatedStorage有效的剩余…

圖像分割-閾值處理詳解(迭代法、Otsu法、平滑改善法、邊緣改進法、分塊處理法、局部特性法、移動平均法)

博主聯系方式&#xff1a; QQ:1540984562 QQ交流群&#xff1a;892023501 群里會有往屆的smarters和電賽選手&#xff0c;群里也會不時分享一些有用的資料&#xff0c;有問題可以在群里多問問。 閾值處理詳解基礎&#xff1a;基于全局的閾值處理1迭代算法&#xff08;最小概率誤…

java 用戶控件_C#自定義控件VS用戶控件

C#中自定義控件VS用戶控件大比拼1 自定義控件與用戶控件區別WinForm中&#xff0c;用戶控件(User Control)&#xff1a;繼承自 UserControl&#xff0c;主要用于開發 Container 控件&#xff0c;Container控件可以添加其他Controls控件自定義控件(Custom Control)&#xff1a;繼…

Java FileDescriptor sync()方法與示例

FileDescriptor類sync()方法 (FileDescriptor Class sync() method) sync() method is available in java.io package. sync()方法在java.io包中可用。 sync() method is used to synchronize all the system buffer with the underlying device. sync()方法用于將所有系統緩沖…

windows 7資源管理器崩潰解決方法

最近被頻繁的資源管理器explorer崩潰搞得幾乎生活不能處理&#xff0c;一打開帶有視頻的文件夾&#xff0c;就explorer崩潰&#xff0c;要瘋了。 日志中含有mpc_mtcontrol.dll 查來查去&#xff0c;沒有一個確定的答案&#xff0c;baidu&#xff0c;google都沒用&#xff0c;最…

03-對圖像進行數值計算和加權融合

數值計算 import cv2img_1 cv2.imread(E:\Jupyter_workspace\study\data/beyond.png) img_2 cv2.imread(E:\Jupyter_workspace\study\data/water2.png)img_1_1 img_1 10 img_1[:2,:,0]#輸出前兩行就行 img_1_1[:2,:,0]#[h,w,c] img_2[:2,:,0]#[h,w,c](img_1 img_2)[:2,:,…

SQL Server存儲過程(procedure)應用

用戶反映&#xff0c;系統操作日志會使用數據庫快速增大&#xff0c;情況可參考下圖&#xff0c; 問題分析&#xff0c;整個系統每個頁面&#xff0c;都有寫記錄用戶操作代碼&#xff0c;修改或禁用這個代碼&#xff0c;看來是不可能的。 在原有系統參數表添加一個選項&#xf…

Opencv一維直方圖的繪制

下面是我參考《opencv3編程入門》寫的繪制一維直方圖的代碼 using namespace cv; using namespace std; #define byte uchar #define TYEPE_GRAY 0 #define TYEPE_RGB 1 /*--------------------------繪制RGB三色一維直方圖-------------------------------------*/ Mat My_R…

Java類class forName()方法及示例

類類forName()方法 (Class class forName() method) forName() method is available in java.lang package. forName()方法在java.lang包中可用。 forName() method is used to return the class object for the Class with the given class_name. forName()方法用于返回具有給…

04-圖像的閾值操作

對圖像的閾值操作 import cv2 import matplotlib.pyplot as pltimg cv2.imread(E:/Jupyter_workspace/study/data/cat.png,1) ret, thresh1 cv2.threshold(img,127,255,cv2.THRESH_BINARY) ret, thresh2 cv2.threshold(img,127,255,cv2.THRESH_BINARY_INV) ret, thresh3 c…

java虛擬機內存監控_深入理解JVM虛擬機9:JVM監控工具與診斷實踐

本文轉自&#xff1a;https://juejin.im/post/59e6c1f26fb9a0451c397a8c本系列文章將整理到我在GitHub上的《Java面試指南》倉庫&#xff0c;更多精彩內容請到我的倉庫里查看https://github.com/h3pl/Java-Tutorial喜歡的話麻煩點下Star哈文章將同步到我的個人博客&#xff1a;…

詳解:數據庫名、實例名、ORACLE_SID、數據庫域名、全局數據庫名、服務名

數據庫名、實例名、數據庫域名、全局數據庫名、服務名&#xff0c;這是幾個令很多初學者容易混淆的概念。相信很多初學者都與我一樣被標題上這些個概念搞得一頭霧水。我們現在就來把它們弄個明白。 一、數據庫名什么是數據庫名&#xff1f;數據庫名就是一個數據庫的標識&#…

顏色縮減 -利用指針、迭代器、動態地址實現訪問像素

為什么要使用顏色縮減 在對單通道圖像進行處理時&#xff0c;像素的可能值為256個&#xff0c;但處理多通道時&#xff0c;像素的處理就會相當麻煩&#xff0c;其實用這些顏色中具有代表性的一小部分就可以達到同樣的效果&#xff0c;所以顏色空間縮減就可以派上用場了。一個信…

setlenient_Java日歷setLenient()方法與示例

setlenient日歷類setLenient()方法 (Calendar Class setLenient() method) setLenient() method is available in java.util package. setLenient()方法在java.util包中可用。 setLenient() method is used to set or unset lenient status of date or time interpretations. s…

PowerShell_9_零基礎自學課程_9_高級主題:靜態類和類的操作

哈哈&#xff0c;昨天弄了個ubuntu 11.10在虛擬機上運行&#xff0c;發現11.10界面非常絢麗&#xff0c;但是其需要的系統資源非常多&#xff0c;我虛擬機設定內存為512M&#xff0c;1個CPU4個核心&#xff0c; 進入以后發現根本動不了&#xff0c;因此今天我就下載了一個Fedor…

05-圖像的平滑處理(不同的濾波操作)

對圖像進行平滑處理實則就是對圖像進行濾波操作罷了 每張圖片都有若干個像素點所構成&#xff0c;濾波操作上就是將照片上的某些部分像素點進行修改從而達到平滑的效果 先展示一下原圖 import cv2 img cv2.imread(E:\Jupyter_workspace\study\data/test1.png)cv2.imshow(te…

js刪除mysql記錄_(DELETEUPDATE)修改、刪除數據記錄_MySQL

有時&#xff0c;希望除去某些記錄或更改它們的內容。DELETE 和 UPDATE 語句令我們能做到這一點。用update修改記錄UPDATE tbl_name SET 要更改的列WHERE 要更新的記錄這里的 WHERE 子句是可選的&#xff0c;因此如果不指定的話&#xff0c;表中的每個記錄都被更新。例如&#…

C++設計模式之Abstract Factory模式

一、功能   提供一個創建一系列相關或相互依賴對象的接口&#xff0c;而無需指定它們具體的類。 二、結構圖類廠最基本的結構示意圖如下&#xff1a; 在實際應用中&#xff0c;類廠模式可以擴充到很復雜的情況&#xff0c;如下圖所示&#xff1a; 三、優缺點 優點&#xff1…

數字圖像處理小練習存檔1

小練習的題目&#xff1a; 1、讀取一張圖&#xff0c;分解RGB三個通道 /************練習1**********************/ int main() {Mat img1 imread("D:\\opencv_picture_test\\miku2.jpg",2|4); //灰度圖if (img1.empty()){printf("Could not find the imag…

UIImage 壓縮

1.改變圖片大小 -(UIImage*)imageWithImage:(UIImage*)image scaledToSize:(CGSize)newSize {// Create a graphics image contextUIGraphicsBeginImageContext(newSize);// Tell the old image to draw in this new context, with the desired// new size[image drawInRect:CG…