最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Further Study of Rugular Expresions

 更新時間:2008年09月24日 22:53:38   作者:  
regular expressions(正則表達式,以下用re稱呼)對小弟來說一直都是神密的地帶,看到一些網絡上的大大,簡單用re就決解了 某些文字的問題

  17. (\(\d{3}\)\d{3})\s?\d{3}[- ]\d{4} (十個數字的電話號碼)
  群組(grouping)
  括號可以用來介定一個次描述,經由次描述的介定,可以針對次描述做重復或及他的處理。
  18. (\d{1,3}\.){3}\d{1,3} (尋找網絡地址的簡單re)
  此re的意思第一個部分(\d{1,3}\.){3},所指的是,數字最小一位最多三位,并且后面接有”.”符號,此類型的共有三個,之后再接一到三位的數字,也就是如192.72.28.1這樣的數字。
  但這樣會有個缺點,因為網絡地址數字最多只到255,但上述的re只要是一到三位的數字都是符合的,所以這需要讓比較的數字小于256才行,但只單獨使用re并無法做這樣的比較。在19中使用擇一來將地址的限制在所需要的范圍內,也就是0到255。
  19. ((2[0-4]\d25[0-5][01]?\d\d?)\.){3}(2[0-4]\d25[0-5][01]?\d\d?) (尋找網絡地址)
  有沒有發(fā)覺re越來越像外星人說的話了?就以簡單的尋找網絡地址,直接看re都滿難理解的哩。
  expresso analyzer view
  expresso提供了一個功能,它可以將所下的re變成樹狀的說明,一組組的分開說明,提供了一個好的除錯環(huán)境。其它的功能,如部分符合 (partial match只查找反白re的部分)及除外符合(exclude match只不查找反白re的部分)就留給各位大大試試啰。
  當次描述用括號群組起來時,符合次描述的文字可用在之后的程序處理或re本身。在預設的情型下,所符合的群組是由數字命名,由1開始,由順序是由左至右,這自動群組命名,可在expresso中的skeleton view或result view中看到。
  backreference是用來查找群組中抓取的符合文字所相同的文字。舉例來說”\1”所指符合群組1所抓取的文字。
  20. \b(\w+)\b\s*\1\b (尋找重復字,此處說的重復是指同樣的字,中間有空白隔開如dog dog這樣的字)
(\w+)會抓取至少一個字符的字母或數字的字,并將它命名為群組1,之后是查找任意空格符,再接和群組1相同的文字。
  如果不喜歡群組自動命名的1,也可以自行命名,以上述例子為例,(\w+)改寫為(?<word>\w+),這就是將所抓取的群組命名為word,backreference就要改寫成為\k<word>
21. \b(?<word>\w+)\b\s*\k<word>\b (使用自行命名群組抓取重復字)
  使用括號還有許多特別的語法元素,比較通用的列表如下:
  抓取(captures)
  (exp) 符合exp并抓取它進自動命名的群組
  (?<name>exp) 符合exp并抓取它進命名的群組name
  (?:exp) 符合exp,不抓取它
  lookarounds
  (?=exp) 符合字尾為exp的文字
  (?<=exp) 符合前綴為exp的文字
  (?!exp) 符合后面沒接exp字尾的文字
  (?<!exp) 符合前面沒接exp前綴的文字
  批注comment
  (?#comment) 批注
  positive lookaround
  接下來要談的是lookahead及l(fā)ookbehind assertions。它們所查找的是目前符合之前或之后的文字,并不包含目前符合本身。 這些就如同”^”及”\b”特殊字符,本身并不會對應任何文字(用來界定位置),也因此稱做是zero-width assertions,看些例子也許 會清楚些。
  (?=exp)是一個”zero-width positive lookahead assertion”。它指的就是符合字尾為exp的文字,但不包含exp本身。
  22. \b\w+(?=ing\b) (字尾為ing的字,比如說filling所符合的就是fill)
(?<=exp)是一個”zero-width positive lookbehind assertion”。它指的就是符合前綴為exp的文字,但不包含exp本身。
  23. (?<=\bre)\w+\b (前綴為re的字,比如說repeated所符合的就是peated)
  24. (?<=\d)\d{3}\b (在字尾的三位數字,且之前接一位數字)
  25. (?<=\s)\w+(?=\s) (由空格符分隔開的字母數字字符串)
  negative lookaround
  之前有提到,如何查找一個非特定或非在特定群組的字符。但如果只是要驗證某字符不存在而不要對應這些字符進來呢?舉個例子來說,假設要查找一個字,它的字母里有q但接下來的字母不是u,可以用下列的re來做。
  26. \b\w*q[^u]\w*\b (一個字,其字母里有q但接下來的字母不是u)
  這樣的re會有一個問題,因為[^u]要對應一個字符,所以若q是字的最后一個字母,[^u]這樣的下法就會將空格符對應下去,結果就有可能會符合二個字,比如說”iraq haha”這樣的文字。使用negative lookaround就能解決這樣的問題。
  27. \b\w*q(?!u)\w*\b (一個字,其字母里有q但接下來的字母不是u)
  這是”zero-width negative lookahead assertion”。
  28. \d{3}(?!\d) (三個位的數字,其后不接一個位數字)
  同樣的,可以使用(?<!exp),”zero-width negative lookbehind assertion”,來符合前面沒接exp前綴的文字符串。
  29. (?<![a-z ])\w{7} (七個字母數字的字符串,其前面沒接字母或空格)
  30. (?<=<(\w+)>).*(?=<\/\1>) (html卷標間的文字)
  這使用lookahead及l(fā)ookbehind assertion來取出html間的文字,不包括html卷標。
  請批注(comments please)
  括號還有個特殊的用途就是用來包住批注,語法為”(?#comment)”,若設定”ignore pattern whitespace”選項,則re中的空格符當re使用時會乎略。此選項設定時,”#”之后的文字會乎略。
  31. html卷標間的文字,加上批注
  (?<=  #查找前綴,但不包含它
  <(\w+)> #html標簽
  ) #結束查找前綴
  .* #符合任何文字
  (?= #查找字尾,但不包含它
  <\/\1> #符合所抓取群組1之字符串,也就是前面小括號的html標簽
  ) #結束查找字尾
  尋找最多字符的字及最少字符的字(greedy and lazy)
  當re下要查找一個范圍的重復時(如”.*”),它通常會尋找最多字符的符合字,也就是greedy matching。舉例來說。
  32. a.*b (開始為a結束為b的最多字符的符合字)
  若有一字符串是”aabab”,使用上述re所得到的符合字符串就是”aabab”,因為這是尋找最多字符的字。有時希望是符合最少字符的字也就是 lazy matching。只要將重復前述項目的表加上問號(?)就可以把它們全部變成lazy matching。因此”*?”代表的就是重復任意 次數,但是使用最少重復的次數來符合。舉個例子來說:
  33. a.*?b (開始為a結束為b的最少字符的符合字)
  若有一字符串是”aabab”,使用上述re第一個所得到的符合字符串就是”aab”再來是”ab”,因為這是尋找最少字符的字。
  *? 重復任意次數,最少重復次數為原則
  +? 重復至少一次,最少重復次數為原則
  ?? 重復零次或一次,最少重復次數為原則
  {n,m}? 重復至少n次,但不超過m次,最少重復次數為原則
  {n,}? 重復至少n次,最少重復次數為原則
還有什么沒提到呢?
  到目前為止,已經提到了許多建立re的元素,當然還有許多元素沒有提到,下表整理了一些沒提到的元素,在最左邊的字段的數字是說明在expresso中的例子。
  # 語法 說明
  \a bell 字符
  \b 通常是指字的邊界,在字符組里所代表的就是backspace
  \t tab
  34 \r carriage return
  \v vertical tab
  \f from feed
  35 \n new line
  \e escape
  36 \nnn ascii八位碼為nnn的字符
  37 \xnn 十六位碼為nn的字符
  38 \unnnn unicode為nnnn的字符
  39 \cn control n字符,舉例來說ctrl-m是\cm
  40 \a 字符串的開始(和^相似,但不需籍由multiline選項)
  41 \z 字符串的結尾
  \z 字符串的結尾
  42 \g 目前查找的開始
  43 \p{name} unicode 字符組名稱為name的字符,比如說\p{lowercase_letter} 所指的就是小寫字
  (?>exp) greedy次描述,又稱之為non-backtracking次描述。這只符合一次且不采backtracking。
  44 (?<x>-<y>exp)
  or (?-<y>exp) 平衡群組。雖復雜但好用。它讓已命名的抓取群組可以在堆棧中操作使用。(小弟對這個也是不太懂哩)
  45 (?im-nsx:exp) 為次描述exp更改re選項,比如(?-i:elvis)就是把elvis大乎略大小寫的選項關掉
  46 (?im-nsx) 為之后的群組更改re選項。
  (?(exp)yesno) 次描述exp視為zero-width positive lookahead。若此時有符合,則yes次描述為下一個符合標的,若否,則no 次描述為下一個符合標的。
  (?(exp)yes) 和上述相同但無no次描述
  (?(name)yesno) 若name群組為有效群組名稱,則yes次描述為下一個符合標的,若否,則no 次描述為下一個符合標的。
  47 (?(name)yes) 和上述相同但無no次描述
  結論
  經過了一連串的例子,及expresso的幫忙,相信各位大大對re有個基本的了解,網絡上當然有許多有關于re的文章,如果各位大大有興趣http://www.codeproject.com 還有許多關于re的相關文章。

相關文章

  • 正則中的圓括號()的用途詳解

    正則中的圓括號()的用途詳解

    正則表達式中的圓括號的作用是對字符進行分組,并保存匹配的文本。今天我們就來詳細探討下正則中的圓括號()的用途,希望對大家學習正則有所幫助。
    2015-04-04
  • 關于IE的RegExp.exec的問題

    關于IE的RegExp.exec的問題

    問題:"A[B]C[D]E[F]G"將其分為兩個數組,分別是 ACEG 和 [B][D][F].
    2010-03-03
  • JavaScript的正則也有單行模式了

    JavaScript的正則也有單行模式了

    這篇文章主要介紹了JavaScript的正則也有單行模式了,需要的朋友可以參考下
    2017-04-04
  • 詳解java中的正則表達式

    詳解java中的正則表達式

    這篇文章主要介紹了java中的正則表達式,判斷目標字符串中是否 可能 含這個字符。本文通過示例代碼給大家介紹的非常詳細,需要的朋友參考下吧
    2018-01-01
  • 正則表達式之字符組簡記法與字符組運算

    正則表達式之字符組簡記法與字符組運算

    這篇文章主要介紹了正則表達式之字符組簡記法與字符組運算,用[0-9]、[a-z]等字符組,這里就為大家介紹一下,需要的朋友可以參考下
    2023-05-05
  • 正則表達式(?=)正向先行斷言實戰(zhàn)案例

    正則表達式(?=)正向先行斷言實戰(zhàn)案例

    x(?=y)稱為先行斷言(Positive look-ahead),x只有在y前面才匹配,y不會被計入返回結果,比如要匹配后面跟著百分號的數字,可以寫成/\d+(?=%)/,這篇文章主要給大家介紹了關于正則表達式(?=)正向先行斷言的相關資料,需要的朋友可以參考下
    2022-11-11
  • @Pattern?用于校驗字符串是否符合特定正則表達式的注解

    @Pattern?用于校驗字符串是否符合特定正則表達式的注解

    @Pattern注解用于Java中驗證字符串格式,通過正則表達式匹配,它可以應用于類屬性、方法參數和返回值,屬性包括regexp正則表達式、message錯誤消息和flags匹配標志,本文介紹@Pattern用于校驗字符串是否符合特定正則表達式的注解,感興趣的朋友跟隨小編一起看看吧
    2024-11-11
  • SqlParser 一個利用正則表達式解析單句SQL的類

    SqlParser 一個利用正則表達式解析單句SQL的類

    一個利用正則表達式解析單句SQL的類,需要的朋友可以參考下
    2012-09-09
  • 正則表達式號碼靚號類型判斷代碼

    正則表達式號碼靚號類型判斷代碼

    很多網站需要將好的會員號留著,或用于日后的盈利。實現方法不是本文討論范圍,本文僅列出博主用于檢測靚號類型的一些正則。
    2010-05-05
  • 正則表達式匹配${key}并在Java中使用的詳細方法

    正則表達式匹配${key}并在Java中使用的詳細方法

    這篇文章主要介紹了正則表達式匹配${key}并在Java中使用的詳細方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03

最新評論

阳朔县| 扎兰屯市| 丽江市| 股票| 石渠县| 棋牌| 盐亭县| 阳朔县| 翁源县| 禹城市| 桓台县| 贺州市| 宁阳县| 根河市| 谢通门县| 泊头市| 富裕县| 南投市| 东乡| 绥阳县| 谢通门县| 烟台市| 通城县| 静乐县| 云龙县| 邵阳县| 韶关市| 梓潼县| 墨竹工卡县| 洛浦县| 麻城市| 安仁县| 潼南县| 阿克| 涞水县| 宜丰县| 阳江市| 隆昌县| 西华县| 亳州市| 南岸区|