正则表达式,以前总结的,大不分来择自网上
后向引用構造
反向引用提供查找重復字符組的方便的方法。它們可被認為是再次匹配同一個字符串的快捷指令。
語法:\number,number是組號
(\w)\1,單個字符重復一次
(\w)(?<dd>\d)\k<dd>
單個數字重復一次
測先行不占用字符,即發生匹配后,下一匹配的搜索緊隨上一匹配之后,而不是在組成預測先行的字符
后。
^Chapter|Section [1-9][0-9]{0,1}$/
很遺憾,上面的正則表達式要么匹配行首的單詞 Chapter,要么匹配行尾的單詞 Section 及跟在其后的任何數字。如果輸入字符串是 Chapter 22,那么上面的表達式只匹配單詞 Chapter。如果輸入字符串是 Section 22,那么該表達式匹配 Section 22。
若要使正則表達式更易于控制,可以使用括號來限制替換的范圍,即,確保它只應用于兩個單詞 Chapter 和 Section。但是,括號也用于創建子表達式,并可能捕獲它們以供以后使用,這一點在有關反向引用的那一節講述。通過在上面的正則表達式的適當位置添加括號,就可以使該正則表達式匹配 Chapter 1 或 Section 3。
下面的正則表達式使用括號來組合 Chapter 和 Section,以便表達式正確地起作用:
/^(Chapter|Section) [1-9][0-9]{0,1}$/
在上面的示例中,您只需要使用括號來組合單詞 Chapter 和 Section 之間的選擇。若要防止匹配被保存以備將來使用,請在括號內正則表達式模式之前放置 ?:。下面的修改提供相同的能力而不保存子匹配項:
/^(?:Chapter|Section) [1-9][0-9]{0,1}$/
?
下面的正則表達式使用括號來組合 Chapter 和 Section,以便表達式正確地起作用:
/^(Chapter|Section) [1-9][0-9]{0,1}$/
盡管這些表達式正確地起作用,但 Chapter|Section 兩側的括號也引起兩個匹配單詞之一被捕獲以供未來使用。由于在上面的表達式中只有一組括號,因此,只有一個被捕獲的“子匹配項”。可以通過使用 RegExp 對象的 $1-$9 屬性來引用此子匹配項。
在上面的示例中,您只需要使用括號來組合單詞 Chapter 和 Section 之間的選擇。若要防止匹配被保存以備將來使用,請在括號內正則表達式模式之前放置 ?:。下面的修改提供相同的能力而不保存子匹配項:
/^(?:Chapter|Section) [1-9][0-9]{0,1}$/
除 ?: 元字符外,兩個其他非捕獲元字符創建被稱為“預測先行”匹配的某些內容。正向預測先行使用 ?= 指定,它匹配處于括號中匹配正則表達式模式的起始點的搜索字符串。反向預測先行使用 ?! 指定,它匹配處于與正則表達式模式不匹配的字符串的起始點的搜索字符串。
例如,假設您有一個文檔,該文檔包含指向 Windows 3.1、Windows 95、Windows 98 和 Windows NT 的引用。再進一步假設,您需要更新該文檔,將指向 Windows 95、Windows 98 和 Windows NT 的所有引用更改為 Windows 2000。下面的正則表達式(這是一個正向預測先行的示例)匹配 Windows 95、Windows 98 和 Windows NT:
/Windows(?=95 |98 |NT )/
找到一處匹配后,緊接著就在匹配的文本(不包括預測先行中的字符)之后搜索下一處匹配。例如,如果上面的表達式匹配 Windows 98,將在 Windows 之后而不是在 98 之后繼續搜索。
?
總結
以上是生活随笔為你收集整理的正则表达式,以前总结的,大不分来择自网上的全部內容,希望文章能夠幫你解決所遇到的問題。