亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Regex > 正文

關于C#中的正則表達式

2024-09-07 17:40:09
字體:
來源:轉載
供稿:網友

你們將看到的一篇關于C#中的正則表達式,相信還是有許多同學還不了解的,沒關系,本文正中你所需,接下來錯新小編就給初學者們耐心的訴說,你們可要認真看喔。

Jeffrey?E.F.?Friedl寫了一本關于正則表達式的書《精通正則表達式》。作者為了使讀者更好的理解和掌握正則表達式,編造了一個故事。該書的語言以perl為主。據我所知C#中的正則表達式也是基于perl5。所以它們應該有許多的共同之處。?
其實,我并不打算原封不動的對該書的內容進行翻譯,一則這本書內容太多了,我根本就不勝任翻譯這項工作;二則如果我真的把這本書翻譯過來,同時把里面的代碼換成C#,在沒有征得原作者的情況下,可能有侵權的嫌疑了。所以,權當作讀書筆記好了。?

略過冗長的前言,我們可以直接進入第一章:?

介紹正則表達式?

作者說這一章是為正則表達式的絕對菜鳥而準備的,目的是為以后的章節打下堅實的基礎。那么如果你是不是菜鳥,你可以忽略這一章。?

故事場景:?
你的檔案部的頭兒想要一個工具用來檢查重復的單詞(如:this?this),一個在大量編輯文檔的時候通常會遇到的問題。你的工作就是創建一個解決方案:?
接受任何數量要檢查的文件,報告每個文件中帶有重復單詞的那些行,突出顯示這些重復的單詞,同時確保原文件名稱和這些行出現在報表中。?
跨行檢查,找到一行的最后一個單詞和下一行開頭第一個單詞出現重復的情況。?
找出重復的單詞,不管他們是否大小寫不同(如:The?the),以及允許在這些重復單詞之間含有不同數量的空白字符(空格、制表符、新行等)?
找出重復的單詞,甚至這些單詞被Html標簽隔開。(如:…it?is?<B>very</B>?very?important.)?

要解決上述的實際問題,我們首先要做的就是寫出正則表達式,找到我們想要的文本,忽略我們不需要的文本,然后使用我們的C#代碼對獲取的文本進行處理。?

在使用正則表達式之前,你也許多少已經知道什么是正則表達式。甚至你不知道,你幾乎可以肯定已經熟悉它的基本概念了。?
你知道report.txt是一個具體的文件名稱,但是如果你有任何Unix或者DOS/Windows的經驗,你也知道“*.txt”可以用來選擇多個文件。這種形式的文件名,有一些字符有著特殊的含義。星號意味著匹配任何東西,問號意味著匹配一個字符。如:“*.txt”表示任何文件名以.txt結尾的文件。?
文件名稱得模式匹配,使用了有限的匹配符。還有當前網絡上的搜索引擎也允許使用某些指定的匹配符來進行內容搜索。正則表達式采用豐富的匹配字符,可以處理各種復雜的問題。?

首先我們介紹兩個位置匹配符:?
^?:?表示一行文字的開始位置?
$?:?表示一行文字的結束位置?

如:表達式:"^Cat",?匹配的單詞Cat出現在行的開始處,注意^是一個位置字符,不是要匹配字符的本身。?
同樣,表達式:"Cat$"?匹配的單詞Cat出現來一行的結尾處。?

接下來,我們介紹表達式中的方括號"[]",?它表示匹配括號中字符中的一個。如:?
表達式:"[0123456789]"將匹配數字0到9的任何一個。?
例如:我們要查找文本中,所有包含gray或者grey,那么表達式可以這么寫:"gr[ea]y"?
[ea]表示匹配ea中的一個,而不是整個ea。?

如果我們要匹配html中的<H1><H2><H3><H4><H5><H6>的標簽,我們可以寫表達式:?
"<H[123456]>",但是如果我們要匹配所有字符中的一個呢?哈,問題就來了,在方括號中寫出所有的字符?很幸運,我們不必這么做,我們引進范圍符號"-";?
使用范圍符號,我們只需要給出一個范圍的邊界字符即可,上面的Html例子,我們可以寫成:"<H[1-6]>"?
而表達式:"[0-9a-zA-Z]"的意思現在清楚了吧?它匹配數字字符,小寫26個字母和大寫26個字母中的一個。?

出現在[]中的"^"符號?
如果你看到表達式如:"[^0-9]",此時,"^"不再是前面說的位置符號,這里它是否定符號,表示排除的意思,上面的表達式,表示不包含數字0到9的字符。?

思考1:表達式"q[^u]"的意思。假如有下列的單詞,那些將被匹配??
Iraqi?
Iraqian?
miqra?
qasida?
qintar?
qoph?
zaqqum?


除了范圍字符的表示之外,還有一個是點字符".",點字符出現在表達式中,表示匹配任何字符。?
如表達式:"07.04.76"將匹配:?
形如:07/04/76,?07-04-76,07.04.76。?

如果我們需要在某些字符中可選擇,我們可以采用選項字符"|":?
選項字符有“或"的意思,比如表達式:"[Bob|Robert]"則表示Bob或者Robert將被匹配。?
現在看我們前面提到的表達式:"gr[ea]y"?,利用選項字符我們可以寫作"grey|gray",它們是相同的。?
圓括號的使用:圓括號在表達式中也是被作為元字符使用,如前面的表達式,我們可以寫成:"gr(e|a)y",這里的圓括號是必須的,如果沒有圓括號,那么表達式"gre|ay"將匹配gre或者ay,這不是我們想要的結果。如果你還不是很清楚,讓我們看一下下面的例子:?
在電子郵件中查找所有以From:或者Subject:或者Date:開頭的行,我們比較下面的兩個表達式:?
表達式1:"^From|Subject|Data:?"?
表達式2:"^(From|Subject|Data):?"?
哪一個是我們想要的??
很明顯,表達式1的結果不是我們想要的結果,它匹配的將是:From或者Subjec或者Data:?,表達式2使用圓括符,就能滿足我們的需要。?

單詞邊界?
我們已經可以匹配出現在行首和行尾的字符,那么如果我們想定位的不僅僅是行首或者行尾呢?我們需要引入單詞邊界符號,單詞邊界符號是:"/b",斜杠不可省略,否則變成匹配字母b。使用單詞邊界符號,我們可以定位匹配的位置必須出現在一個單詞的開始或者結尾部分,而不是在單詞的中間。例如:"/bis/b"表達式在字符串"This?is?a?cat."中將匹配單詞"is"而不會匹配單詞"This"中的"is"。?

字符串邊界符號?
除了上述的位置符號,如果我們要匹配的是整個字符串(含多個單詞)那么我們可以使用下面的兩個符號:?
/A?:表示字符串的開始處;?
/z?:表示字符串的結束處。?
表達式:"/AThis?is?a?cat/z"將匹配這個字符串"This?is?a?cat"。?
使用邊界定位符號,這里要提到一個重要的概念,那就是單詞字符,單詞字符表示可以構成單詞的字符,它們是[a-zA-Z0-9]中的任意一個字符。所以上面的表達式也會在句子"This?is?a?cat."得到匹配。匹配的結果不包含句號。?


重復數量符號?
讓我們看表達式:"Colou?r",?這個表達式中出現了我們還沒有見過的問號,(這個問號和文件名稱匹配的問號意義不同),它表示符號前面的一個字符可以被重復的次數,"?"表示0次或者1次,前面的表達式中問號表示u可以出現0或1次,所以它將匹配"Color"或者"Colour"。?
下面是其他的重復數量符號:?
+?:表示1次或者多次?
*?:表示0次或者多次?
例如我們要表示一或多個空格,我們可以寫表達式:"?+";?

如果要表示具體次數呢?我們引入花括符{}。?
{n}?:?n是具體的數字,表示重復n次。?
{n,m}:?表示最少那次,最多m次。?

這些符號都限定了符號前面一個字符的匹配次數。但是如果你想重復多個字符,比如一個單詞,那么怎么辦?我們再次使用圓括號,前面我們把圓括號作為選項的范圍符號,這里是圓括的另外一種使用方法,它被表示為一個組,例如表達式:“(this)"這里的this就是一個組,那么問題就好辦了,重復數量符號可以用來表示它前面一個組的重復次數。?

現在回到查找重復單詞的問題,假如我們要找到“the?the”,根據我們迄今為止學到的知識,我們可以寫出表達式:?
"/bthe?+the/b"?
表達式的意思是匹配兩個the中間有一個或多個空格隔開。?
同樣,我們還可以寫成:?
"/b(the?+){2}"?

但是如果要找全部可能的重復單詞呢?我們目前的知識還不足以解決這個問題,下面我們引進反向引用的概念,我們已經看到圓括號可以作為組的邊界,一個表達式中可以有多個被圓括號限定的組,根據它們出現的次序,這些組缺省的被分配了一個組號,第一個出現的組號為1號,依次類推。那么反向引用就是可以在之后的表達式的位置上是使用"/n"來引用這個組,這里n是被引用的組號。反向引用就像是程序中的變量一樣,下面我們看具體的例子:?
前面的單詞重復表達式,現在我們采用反向引用可以寫做:?
"/b(the)?+/1/b"?
現在,如果我們要匹配所有的重復單詞,我們就可以改寫表達式為:?
"/b([a-zA-Z]+)?+/1/b"?

最后一個問題是,如果我們要匹配的字符是正則表達式中的符號,怎么辦?對,使用轉義符號"/",?例如如果你要匹配一個小數點,那么你可以:"/.",還要注意的是如果在程序中使用表達式那么"/"也要按照字符串的規定變成"http://"或者在表達式前面加@。?

本文只是給初學者一個關于正則表達式的基礎知識,它只是其中的部分,我們需要學習的東西還很多,錯新技術小編將在以后的工作中給同學們一一介紹。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲视屏在线播放| 亚洲男人天堂网站| 欧美韩日一区二区| 欧美午夜视频一区二区| 欧美视频13p| 欧美性xxxxxxx| 欧美电影免费观看网站| 夜夜嗨av色一区二区不卡| 亚洲第一天堂无码专区| 欧美三级免费观看| 亚洲最新视频在线| 亚洲久久久久久久久久| 国产精品久久久久77777| 欧美成人剧情片在线观看| 日韩精品视频免费专区在线播放| 亚洲第一精品福利| 久久天天躁日日躁| 欧美电影免费观看高清完整| 欧美亚洲一区在线| 久久精品电影网站| 在线日韩第一页| 国产亚洲免费的视频看| 高清日韩电视剧大全免费播放在线观看| 色与欲影视天天看综合网| 亚洲成人教育av| 欧美在线观看日本一区| 国产女人18毛片水18精品| 精品欧美国产一区二区三区| 久久噜噜噜精品国产亚洲综合| 国产精品久久久久久一区二区| 国产精品揄拍500视频| 亚洲国产精品va在线看黑人动漫| 国产盗摄xxxx视频xxx69| 亚洲精品456在线播放狼人| 久久深夜福利免费观看| 日韩欧美国产网站| 精品欧美激情精品一区| 国产一区二区美女视频| 国内揄拍国内精品少妇国语| 日韩精品在线播放| 成人高清视频观看www| 欧美在线xxx| 国产精品久久久久久久久久东京| 国产精品久久久久77777| 在线电影中文日韩| 国产美女久久精品| 国内精品久久久久伊人av| 亚洲自拍偷拍色片视频| 亚洲天堂男人的天堂| 国产综合视频在线观看| 国产一区二区香蕉| 黑人巨大精品欧美一区二区免费| 亚洲精品国精品久久99热一| 国产福利视频一区| 国产日韩av在线播放| 久久久久久噜噜噜久久久精品| 7777精品久久久久久| 欧美国产在线视频| 91免费精品视频| 日韩av影视在线| 中文综合在线观看| 色播久久人人爽人人爽人人片视av| 欧美激情在线播放| 伊人久久久久久久久久久久久| 日韩av片电影专区| 亚洲а∨天堂久久精品喷水| 亚洲免费高清视频| 精品久久久久久久大神国产| 日韩免费看的电影电视剧大全| 欧美视频在线观看免费| 韩曰欧美视频免费观看| 欧美亚洲在线播放| 国产日韩欧美黄色| 一本一本久久a久久精品综合小说| 久久精品在线播放| 热久久99这里有精品| 91国产中文字幕| 欧美中文字幕在线观看| 4k岛国日韩精品**专区| 欧美做受高潮电影o| 久久久欧美一区二区| 久久久国产一区二区三区| 成人欧美在线观看| 91精品国产综合久久香蕉922| 日韩成人在线网站| 亚洲国产97在线精品一区| 国产激情视频一区| 亚洲综合最新在线| 久久久亚洲精选| 久久人91精品久久久久久不卡| 亚洲日本欧美日韩高观看| 亚洲精品中文字| 国产精品麻豆va在线播放| 高清欧美一区二区三区| 久久777国产线看观看精品| 亚洲乱码av中文一区二区| 在线播放日韩专区| 日韩a**站在线观看| 国产午夜精品一区理论片飘花| 欧美精品久久久久久久免费观看| 国产一区二区日韩精品欧美精品| 中文字幕亚洲欧美日韩2019| 555www成人网| 成人av资源在线播放| 国产精品久久久亚洲| 最近2019中文字幕第三页视频| 国产亚洲精品高潮| 精品久久久久久久久久久| 精品无人国产偷自产在线| 久久久久久久爱| 91精品综合视频| 国产999精品| 日韩在线中文视频| 成人福利网站在线观看| 亚洲欧美激情在线视频| 久久久久免费精品国产| 在线播放国产一区二区三区| 国产精品久久久久久久久久东京| 国产精品九九九| 91麻豆国产精品| 亚洲精品永久免费| 欧美精品18videosex性欧美| 国模极品一区二区三区| 国产精品男人爽免费视频1| 亚洲午夜国产成人av电影男同| 黄色一区二区在线| 国产精品欧美风情| 精品久久久久久中文字幕一区奶水| 国产亚洲一区二区精品| 亚洲国产精品久久久久久| 亚洲专区国产精品| 亚洲人成亚洲人成在线观看| 欧美亚洲国产另类| 国产成人精品在线播放| 日韩精品免费观看| 精品视频在线导航| 国产亚洲一级高清| 日韩欧美精品网站| 亚洲va欧美va国产综合剧情| 欧美激情奇米色| 欧美在线www| 久久久女女女女999久久| 中文字幕亚洲一区二区三区五十路| 欧美日韩国内自拍| 亚洲精品99久久久久| 韩日欧美一区二区| 国产日韩欧美一二三区| 国产精品久久久久久av福利| 国产精品无av码在线观看| 国产精品一二区| 久久久久久91| 国产精品视频播放| 欧美黑人视频一区| 日韩天堂在线视频| www亚洲欧美| 国产精品永久免费在线| 日韩a**中文字幕| 国产日韩欧美另类| 日韩在线视频观看| 精品国产精品自拍| 亚洲第一福利视频| 亚洲网站在线看| 成人国产精品日本在线| 久久久久久亚洲精品中文字幕|