正则表达式的学习二:正则表达式的匹配规则总结
一、^ 和 $ 的匹配
^once:這個模式包含一個特殊的字符^,表示該模式只匹配那些以once開頭的字符串;buct$: 這個模式包含了$, 表示該模式只匹配以buct結(jié)尾的字符串;^buctser$: 這個模式包含了^$,所以該模式只匹配“buctser” 這一個值了。once : 如果既不包含 又不包含 ,那么只要含有once中的元素的都是符合的。例如: Who kept all of his cash in a bucket. (o-n-c-e)四個元素都有,所以符合匹配規(guī)則。
二、* ?+ ?? 的匹配 --限定字符
? ?上面四種都是限定符,在表達(dá)式中控制字符出現(xiàn)的次數(shù)。例如
o*: 表示o在匹配對象中出現(xiàn)0次或者多次 o+:表示o在匹配對象中出現(xiàn)1次或者多次 o?:表示o在匹配對象中出現(xiàn)0次或者1次注意:*、+和?限定符都是貪婪的,因為它們會盡可能多的匹配文字,只有在它們的后面加上一個?就可以實現(xiàn)非貪婪或最小匹配。
例如: ?o+?:只匹配單個o.
三、[]的匹配
若要創(chuàng)建匹配字符組的一個列表,請在方括號([ 和 ])內(nèi)放置一個或更多單個字符。當(dāng)字符括在中括號內(nèi)時,該列表稱為"中括號表達(dá)式"。與在任何別的位置一樣,普通字符在中括號內(nèi)表示其本身,即,它在輸入文本中匹配一次其本身。大多數(shù)特殊字符在中括號表達(dá)式內(nèi)出現(xiàn)時失去它們的意義。不過也有一些例外,如:
- 如果 ] 字符不是第一項,它結(jié)束一個列表。若要匹配列表中的 ] 字符,請將它放在第一位,緊跟在開始 [ 后面。
- \ 字符繼續(xù)作為轉(zhuǎn)義符。若要匹配 \ 字符,請使用 \\。
括在中括號表達(dá)式中的字符只匹配處于正則表達(dá)式中該位置的單個字符。以下正則表達(dá)式匹配 Chapter 1、Chapter 2、Chapter 3、Chapter 4 和 Chapter 5:
/Chapter [12345]/?
四、替換和分組
替換使用 | 字符來允許在兩個或多個替換選項之間進(jìn)行選擇。例如,可以擴(kuò)展章節(jié)標(biāo)題正則表達(dá)式,以返回比章標(biāo)題范圍更廣的匹配項。但是,這并不象您可能認(rèn)為的那樣簡單。替換匹配 | 字符任一側(cè)最大的表達(dá)式。
您可能認(rèn)為,下面的表達(dá)式匹配出現(xiàn)在行首和行尾、后面跟一個或兩個數(shù)字的 Chapter 或 Section:
/^Chapter|Section [1-9][0-9]{0,1}$/很遺憾,上面的正則表達(dá)式要么匹配行首的單詞 Chapter,要么匹配行尾的單詞 Section 及跟在其后的任何數(shù)字。如果輸入字符串是 Chapter 22,那么上面的表達(dá)式只匹配單詞 Chapter。如果輸入字符串是 Section 22,那么該表達(dá)式匹配 Section 22。
若要使正則表達(dá)式更易于控制,可以使用括號來限制替換的范圍,即,確保它只應(yīng)用于兩個單詞 Chapter 和 Section。但是,括號也用于創(chuàng)建子表達(dá)式,并可能捕獲它們以供以后使用,這一點在有關(guān)反向引用的那一節(jié)講述。通過在上面的正則表達(dá)式的適當(dāng)位置添加括號,就可以使該正則表達(dá)式匹配 Chapter 1 或 Section 3。
下面的正則表達(dá)式使用括號來組合 Chapter 和 Section,以便表達(dá)式正確地起作用:
/^(Chapter|Section) [1-9][0-9]{0,1}$/盡管這些表達(dá)式正常工作,但 Chapter|Section 周圍的括號還將捕獲兩個匹配字中的任一個供以后使用。由于在上面的表達(dá)式中只有一組括號,因此,只有一個被捕獲的"子匹配項"。
在上面的示例中,您只需要使用括號來組合單詞 Chapter 和 Section 之間的選擇。若要防止匹配被保存以備將來使用,請在括號內(nèi)正則表達(dá)式模式之前放置 ?:。下面的修改提供相同的能力而不保存子匹配項:
/^(?:Chapter|Section) [1-9][0-9]{0,1}$/除 ?: 元字符外,兩個其他非捕獲元字符創(chuàng)建被稱為"預(yù)測先行"匹配的某些內(nèi)容。正向預(yù)測先行使用 ?= 指定,它匹配處于括號中匹配正則表達(dá)式模式的起始點的搜索字符串。反向預(yù)測先行使用 ?! 指定,它匹配處于與正則表達(dá)式模式不匹配的字符串的起始點的搜索字符串。
例如,假設(shè)您有一個文檔,該文檔包含指向 Windows 3.1、Windows 95、Windows 98 和 Windows NT 的引用。再進(jìn)一步假設(shè),您需要更新該文檔,將指向 Windows 95、Windows 98 和 Windows NT 的所有引用更改為 Windows 2000。下面的正則表達(dá)式(這是一個正向預(yù)測先行的示例)匹配 Windows 95、Windows 98 和 Windows NT:
/Windows(?=95 |98 |NT )/找到一處匹配后,緊接著就在匹配的文本(不包括預(yù)測先行中的字符)之后搜索下一處匹配。例如,如果上面的表達(dá)式匹配 Windows 98,將在 Windows 之后而不是在 98 之后繼續(xù)搜索。
五、特殊例子
| /\b([a-z]+) \1\b/gi | 一個單詞連續(xù)出現(xiàn)的位置。 |
| /(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/ | 將一個URL解析為協(xié)議、域、端口及相對路徑。 |
| /^(?:Chapter|Section) [1-9][0-9]{0,1}$/ | 定位章節(jié)的位置。 |
| /[-a-z]/ | A至z共26個字母再加一個-號。 |
| /ter\b/ | 可匹配chapter,而不能匹配terminal。 |
| /\Bapt/ | 可匹配chapter,而不能匹配aptitude。 |
| /Windows(?=95 |98 |NT )/ | 可匹配Windows95或Windows98或WindowsNT,當(dāng)找到一個匹配后,從Windows后面開始進(jìn)行下一次的檢索匹配。 |
| /^\s*$/ | 匹配空行。 |
| /\d{2}-\d{5}/ | 驗證由兩位數(shù)字、一個連字符再加 5 位數(shù)字組成的 ID 號。 |
| /<\s*(\S+)(\s[^>]*)?>[\s\S]*<\s*\/\1\s*>/ | 匹配 HTML 標(biāo)記。 |
轉(zhuǎn)載于:https://www.cnblogs.com/renxiaoren/p/5315662.html
《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的正则表达式的学习二:正则表达式的匹配规则总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Django:数据库表的建立与增删查改(
- 下一篇: poj2478 Farey Sequen