Sigil正則表達式入門_第1頁
Sigil正則表達式入門_第2頁
Sigil正則表達式入門_第3頁
Sigil正則表達式入門_第4頁
Sigil正則表達式入門_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、Sigil正則表達式入門正則表達式,是一種用特殊符號表示文字的方法,主要用在查找和替換方面。下面的例子可以讓你知道正則表達式是干什么用的。在一個文本中,有這樣的一些內容:序章第一章 ABCDEF第二章 GHIJKL第三章 終章這種內容我們都很熟悉,你有沒有想過,用什么辦法可以把這些內容一次過查找出來呢?為了簡化,我們先來看這個部分。第一章第二章第三章可以看到,這些內容有著極高的相似性,由“第”,“章”開頭和結尾,中間有著一些數(shù)字。如果我們能用一個什么符號來代表中間的所有字,比如一個圓點“.”,不就可以用這樣的方式來查找出所有這樣的內容了嗎。第.章很早之前,就有人發(fā)明了一套完整的方案,讓我們可以

2、用各種不同的符號來達到這種目的,那就是我們將要了解的正則表達式。正則表達式作為一種描述字符的方案,在大量軟件、編程語言中都有所運用,而在這些不同的平臺上,正則表達式的使用方式又往往會有或多或少的差異,在某個平臺上管用的表達式,換個地方可能就要改改才能正確運行。那么在這篇文章里,我們主要是講Sigil中的正則表達式,至于推廣應用,就要靠大家去查找資料了。1. 元字符我們前面提到,正則表達式一個重要作用就是用特別的符號來代表一類字符,而這些符號就叫做“元字符”。這些元字符在大多數(shù)環(huán)境下都是通用的。注意,元字符中所有符號都是半角符號,也就是通常說的英文符號。以下是一些常見的元字符,實際上還有更多。這

3、些元字符都經過測試,在Sigil下有效。符號意義說明.任意一個字符最簡單的元字符,匹配任意字符,但不包括換行符“n”。轉義把元字符改變?yōu)槠胀ㄗ址?,或者把某些普通字符轉變?yōu)樵址?。比如,?”就是代表普通的點號,不代表其他字符。s空白字符半角空格、制表符等空白字符。在Sigil中還能匹配到換行符“n”和空白行,使用要注意。注意,不能匹配到全角空格。t制表符匹配制表符。n換行符表示文章的換行,這是一個不可見符號,在例子中,這個符號在“_”的位置。aaanbbb你能夠通過“n”找到換行符,但不能夠插入換行符。要在替換結果中換行,需要用“r”。r回車代表一個回車符。這個符號不會在文本中出現(xiàn),因此不能查

4、找到。但是如果你需要在查找結果中插入一個換行,那么就要用“r”。注意,插入后在文本中出現(xiàn)的仍然會是“n”而不是“r”。d任意一個阿拉伯數(shù)字也就是可以代表09中的任意一個。D任意一個非阿拉伯數(shù)字09以外的字符,同樣的,不包括換行符“n”行首即一行的開頭。Sigil中不能單獨使用,要配合其他字符。比如,“a”表示在行首的“a”,能匹配到第一行和第三行的字母“a”。第二行因為行首是空格,因此匹配不到。abcabcabc$行尾表示任意一行的結尾,不包括換行符。在Sigil中不能單獨使用。比如,“c$”表示位于行尾的“c”,能夠匹配到第一行和第二行的字母“c”。abcabcabcd+一或更多表示一個或更

5、多。必須配用其他字符使用。添加在一個字符后面,表示一個或更多個該字符。相當于“1,”比如,“a+”表示一個以上的“a”,以下例子都能匹配到。aaaaaa?盡可能少表示盡可能少。必須配合其他字符使用。比如,“accccbb”中“a.*b”匹配到“accccbb”,而“a.*?b”就能只匹配到“accccb”。注意:在某些平臺的正則表達式中,這一功能很可能由“-”減號提供。|或一個邏輯選擇符?!癮a|bb”既可以匹配到“aa”也可以匹配到“bb”??梢杂玫蕉鄠€選項中,比如“aa|bb|cc”。“1|2|3”相當于“123”。*盡可能多即無或更多。相當于“0,”n,m個數(shù)范圍表示匹配項的個數(shù)范圍。比

6、如,“a3”表示“aaa”,“a2,4”表示“aa”或“aaa”或“aaaa”,“a1,”表示一個以上的“a”。注意,“a,2”應該表示兩個以下的“a”,但是這種寫法在Sigil中無效,要寫成“a0,2”。包含“”本身匹配一個字符。比如,“abc”匹配“a”、“b”或“c”。通常不分順序,“”和“”一樣?!啊敝杏谩?”表示范圍,“a-z”表能匹配到“a”到“z”全部26個字母之一。比如,“”和“d”是一樣的,但是“d”速度更快。如果要在“”中匹配“-”本身,把“-”寫在最前面,或者把它轉義“-”。比如“-0-9”,就能匹配所有阿拉伯數(shù)字和“-”。不包含“”的逆操作。比如“abc”,能匹配到第二

7、行,第三行。abcadcafc注意,因為“”中符號是無序的,因此如果要排除字符串,要用其他方法。()捕獲組“(abc)”表示把“abc”分為一組。分組后可以配合其他元字符使用。一個組稱為一個捕獲組。比如,“(abc)+”就是一個或以上“abc”組合的意思。捕獲組中的內容會被記錄并編號,可以通過“0”“1”這種形式來引用。(?:)分組/非捕獲組作用上與“()”類似,能把內容分為一組,但“(?:)”僅有分組功能,不記錄匹配內容。也就是說,無法通過“0”“1”等方式引用。此元字符雖然消耗的資源更少,速度更快,在簡單應用中可能體驗不到與“()”的區(qū)別。0,1,2.反向引用配合分組使用,引用一個分組。比

8、如,在查找時有分組“(abc)”,那么“1”就代表“abc”。有分組“a(bc)(de)f”,那么“0”代表“abcdef”,“1”代表“bc”,“2”代表“de”。如此類推。嵌套也是一樣的,比如“(abc(def)”,“1”代表“abcdef”,“2”代表“def”。同樣地,也能在查找時應用。比如有字符串“abc111abc”,那么表達式“(abc).*1”就能匹配到所有內容。注:在其他平臺中,可能使用的是$0,$1等表示方法。(?s)多行匹配放在表達式的最前端,使得“.”可以匹配到“n”,從而實現(xiàn)跨行匹配。比如以下例子:使用正則表達式“.*”一次只能匹配到第一行或者第三行。而使用“(?s)

9、.*”則能一次性匹配到第一行到第三行所有內容。注:這是Sigil特有元字符,其他平臺有另外的方法實現(xiàn)該功能。注2:此前綴和勾選“DotAll”效果一致。(?U)最少匹配放在表達式的最前端,使得整個正則表達式實現(xiàn)最少匹配。比如以下例子:AAABBBCCC正則表達式“.*”會匹配到整個句子。而“(?U).*”只會匹配到“AAABBB”。注:這是Sigil特有元字符,其他平臺有另外的方法實現(xiàn)該功能。注2:此前綴和勾選“Minimal Match”效果一致。2. 常用正則表達式在這一部分,我們回來看一些很常用的正則表達式,這些表達式往往是更復雜表達式的組成部分。2.1 所有字符.*匹配所有內容。“.”

10、代表一個字符,“*”代表任意多個,因此“.*”代表“所有字符”。比如.*表示標簽內的所有內容,可以依次匹配到下列各項AAACCCC!AAAAACCCC啊啊啊啊但不能跨行,這樣是匹配不到的。AAAAAA如果要跨行,需要使用“(?s)”。2.2 空白行 t *$n匹配空白行的典型寫法??梢云ヅ錈o內容的行,只有空格的行,只有制表符的行或者空格和制表符混合排列的行。中包括的分別是空格“ ”,制表符“t”和全角空格“”。也可以根據(jù)需要添加更多的字符。2.3 行尾空白字符t+$匹配出現(xiàn)在行尾的空白字符,比如空格。思路和2.2一致,使用“$”把搜查范圍限定在結尾,使用了符號“+”確保最少有一個空白字符,否則

11、會查找失敗。2.4 壓縮重復符號查找。+替換。很容易理解,把一個以上的“?!?,換成一個“?!?,從而達到壓縮重復符號的目的。可以靈活改變,壓縮各種重復的字符。配合2.2的查找空白行,也能實現(xiàn)壓縮空白行。3. 應用實例在這一部分,我們會看一些Sigil使用過程中實際會用到的例子,方便各位了解正則表達式的使用。3.1 添加標簽你打算為所有的圖片添加一個,并且class為images原語句目標語句使用元字符. ,* ,0查找替換0解說:查找以“”結尾的所有句子,這個表達式默認分組為“0”,因此可以用“0”來引用。如果你的文本中圖片語句必定是獨立一行的,可以直接使用“”后面是否緊跟換行符“n”來判斷圖片

12、是否獨立一行,從而實現(xiàn)不同位置圖片的匹配。擴展:同樣的,你可以用這個方法為各種內容很方便的添加標簽,如果你常常用到這樣的替換,不要忘記善用Sigil的搜索模板功能。3.2 拼接斷行在一些文本中,會存在斷行,我們要把這些斷行重新拼接起來。原文本床前明月光,疑是地上霜。舉頭望明月,低頭思故鄉(xiāng)。目標文本床前明月光,疑是地上霜。舉頭望明月,低頭思故鄉(xiāng)。使用元字符,n查找(,。)$n替換1解說其實所謂的斷行,就是在不該換行的地方進行了換行,那么只要分析出不該換行的特征就可以了。在這個例子中,換行只應該出現(xiàn)在“,”和“?!焙竺?,因此我們查找前面沒有“,”或者“?!钡膿Q行,并且將其刪除就可以了。因為使用的正

13、則表達式會匹配到“n”前面的一個字符,為了不把這個字符也刪除,所以要用“()”把這個字符保護起來。擴展實際上我們還可以使用“零寬斷言”來達到這個效果,寫法是“(?!,。$)n”,直接替換為空,零寬斷言本身就保護了字符。但是作為一個入門應用,我還是先介紹使用“”的方法,關于零寬斷言,有興趣的朋友可以到這個網址了解:/rcom10002/acle/details/3.3 識別章節(jié)標題這是很常見的一個需求,我們往往要為章節(jié)標題添加,之類的標簽。通過3.1我們已經了解到如何添加標簽,因此這里著重講解如何識別標題。原文本序章第一章 XXXX第二章 CCCC第三章 A

14、AAA終章后記目標文本序章第一章 XXXX第二章 CCCC第三章 AAAA終章后記使用元字符. ,* ,(),1,|,m,n查找(序章|第.1,3章|終章|后記).*)替換1解說表達式開始的“”查找內容必須是每一行的開頭,這樣才不會匹配到正文中的“第N章”之類的內容。當然,還是無法完全排除匹配到正文的可能性,因此要注意替換次數(shù),如果次數(shù)和章節(jié)數(shù)目不符,就要留意了。通過“|”的使用,我們可以在一個表達式中就匹配到所有的內容,要善用“|”?!暗?1,3章”是一個保險,最多匹配到“第九十九章”這樣的字符串,在實際使用中,往往只需要寫“第.章”。如果是“第1章”這樣的,就可以用“第d章”來更精準的匹配。3.5 自動插入內容原文本XXXX目標文

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論