麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

Java正則表達式之從入門到精通

2019-11-18 14:30:25
字體:
來源:轉載
供稿:網友

  假如原來沒有使用過正則表達式,那么可能對這個術語和概念會不太熟悉。不過,它們并不是您想象的那么新奇。
  
  請回想一下在硬盤上是如何查找文件的。您肯定會使用 ? 和 * 字符來幫助查找您正尋找的文件。? 字符匹配文件名中的單個字符,而 * 則匹配一個或多個字符。一個如 'data?.dat' 的模式可以找到下述文件:
  
  data1.dat
  
  data2.dat
  
  datax.dat
  
  dataN.dat
  
  假如使用 * 字符代替 ? 字符,則將擴大找到的文件數量。'data*.dat' 可以匹配下述所有文件名:
  
  data.dat
  
  data1.dat
  
  data2.dat
  
  data12.dat
  
  datax.dat
  
  dataXYZ.dat
  
  盡管這種搜索文件的方法肯定很有用,但也十分有限。? 和 * 通配符的有限能力可以使你對正則表達式能做什么有一個概念,不過正則表達式的功能更強大,也更靈活。
  
  -------------------------------------------------------
  2.早期起源
  
  早期起源
  
  正則表達式的“祖先”可以一直上溯至對人類神經系統如何工作的早期研究。Warren McCulloch 和 Walter Pitts 這兩位神經生理學家研究出一種數學方式來描述這些神經網絡。
  
  1956 年, 一位叫 Stephen Kleene 的美國數學家在 McCulloch 和 Pitts 早期工作的基礎上,發表了一篇標題為“神經網事件的表示法”的論文,引入了正則表達式的概念。正則表達式就是用來描述他稱為“正則集的代數”的表達式,因此采用“正則表達式”這個術語。
  
  隨后,發現可以將這一工作應用于使用Ken Thompson 的計算搜索算法的一些早期研究,Ken Thompson是Unix 的主要發明人。正則表達式的第一個實用應用程序就是 Unix 中的qed 編輯器。
  
  如他們所說,剩下的就是眾所周知的歷史了。從那時起直至現在正則表達式都是基于文本的編輯器和搜索工具中的一個重要部分。
  --------------------------------------------------------
  3.使用正則表達式
  
  在典型的搜索和替換操作中,必須提供要查找的確切文字。這種技術對于靜態文本中的簡單搜索和替換任務可能足夠了,但是由于它缺乏靈活性,因此在搜索動態文本時就有困難了,甚至是不可能的。
  
  使用正則表達式,就可以:
  
  1.測試字符串的某個模式。例如,可以對一個輸入字符串進行測試,看在該字符串是否存在一個電話號碼模式或一個信用卡號碼模式。這稱為數據有效性驗證。
  
  2.替換文本??梢栽谖臋n中使用一個正則表達式來標識特定文字,然后可以全部將其刪除,或者替換為別的文字。
  
  3.根據模式匹配從字符串中提取一個子字符串??梢杂脕碓谖谋净蜉斎胱侄沃胁檎姨囟ㄎ淖?。
  
  例如,假如需要搜索整個 web 站點來刪除某些過時的材料并替換某些Html 格式化標記,則可以使用正則表達式對每個文件進行測試,看在該文件中是否存在所要查找的材料或 HTML 格式化標記。用這個方法,就可以將受影響的文件范圍縮小到包含要刪除或更改的材料的那些文件。然后可以使用正則表達式來刪除過時的材料,最后,可以再次使用正則表達式來查找并替換那些需要替換的標記。
  
  另一個說明正則表達式非常有用的示例是一種其字符串處理能力還不為人所知的語言。VBScript 是 Visual Basic 的一個子集,具有豐富的字符串處理功能。與 C 類似的 Visual Basic Scripting Edition 則沒有這一能力。正則表達式給 Visual Basic Scripting Edition 的字符串處理能力帶來了明顯改善。不過,可能還是在 VBScript 中使用正則表達式的效率更高,它答應在單個表達式中執行多個字符串操作
  
  4.正則表達式語法
  一個正則表達式就是由普通字符(例如字符 a 到 z)以及非凡字符(稱為元字符)組成的文字模式。該模式描述在查找文字主體時待匹配的一個或多個字符串。正則表達式作為一個模板,將某個字符模式與所搜索的字符串進行匹配。
  
  這里有一些可能會碰到的正則表達式示例:
  
  Visual BasicVBScript匹配 Scripting Edition
  
  /^/[ /t]*$/chr(34)^/[ /t]*$chr(34)匹配一個空白行。
  
  //d{2}-/d{5}/chr(34)/d{2}-/d{5}chr(34)驗證一個ID號碼是否由一個2位字,一
  個連字符以及一個5位數字組成。
  
  /<(.*)>.*<///1>/chr(34)<(.*)>.*<///1>chr(34)匹配一個 HTML 標記。
  
  下表是元字符及其在正則表達式上下文中的行為的一個完整列表:
  
  字符描述
  
  /將下一個字符標記為一個非凡字符、或一個原義字符、或一個 后向引用、或一個八進制轉義符。例如,'n' 匹配字符 chr(34)nchr(34)。'/n' 匹配一個換行符。序列 '//' 匹配 chr(34)/chr(34) 而 chr(34)/(chr(34) 則匹配 chr(34)(chr(34)。
  
  ^匹配輸入字符串的開始位置。假如設置了 RegEXP 對象的 Multiline 屬性,^ 也匹配 '/n' 或 '/r' 之后的位置。
  
  $匹配輸入字符串的結束位置。假如設置了 RegExp 對象的Multiline 屬性,$ 也匹配 '/n' 或 '/r' 之前的位置。
  
  *匹配前面的子表達式零次或多次。例如,zo* 能匹配 chr(34)zchr(34) 以及chr(34)zoochr(34)。 * 等價于{0,}。
  
  +匹配前面的子表達式一次或多次。例如,'zo+' 能匹配 chr(34)zochr(34) 以及 chr(34)zoochr(34),但不能匹配 chr(34)zchr(34)。+ 等價于 {1,}。
  
  ?匹配前面的子表達式零次或一次。例如,chr(34)do(es)?chr(34) 可以匹配chr(34)dochr(34) 或 chr(34)doeschr(34) 中的chr(34)dochr(34) 。? 等價于 {0,1}。
  
  {n}n 是一個非負整數。匹配確定的 n 次。例如,'o{2}' 不能匹配
  chr(34)Bobchr(34) 中的 'o',但是能匹配 chr(34)foodchr(34) 中的兩個 o。
  
  {n,}n 是一個非負整數。至少匹配n 次。例如,'o{2,}' 不能匹配 chr(34)Bobchr(34) 中的 'o',但能匹配 chr(34)fooooodchr(34) 中的所有 o。'o{1,}' 等價于 'o+'。'o{0,}' 則等價于 'o*'。
  
  {n,m}m 和 n 均為非負整數,其中n <= m。最少匹配 n 次且最多匹配 m 次。劉, chr(34)o{1,3}chr(34) 將匹配 chr(34)foooooodchr(34) 中的前三個o。'o{0,1}'等價于'o?'。請注重在逗號和兩個數之間不能有空格
  
  ?當該字符緊跟在任何一個其他限制符 (*, +, ?, {n}, {n,},{n,m}) 后面時,匹配模式是非貪婪的。非貪婪模式盡可能少的 匹配所搜索的字符串,而默認的貪婪模式則盡可能多的匹配所搜索的字符串。例如,對于字符串 chr(34)oooochr(34),'o+?' 將匹配單個 chr(34)ochr(34),而 'o+' 將匹配所有 'o'。
  
  .匹配除 chr(34)/nchr(34) 之外的任何單個字符。要匹配包括 '/n' 在內的任何字符,請使用象 '[./n]' 的模式。
  
  (pattern)匹配pattern 并獲取這一匹配。所獲取的匹配可以從產生的Matches 集合得到,在VBScript 中使用 SubMatches 集合,在Visual Basic Scripting Edition 中則使用 $0…$9 屬性。要匹配圓括號字符,請使用 '/(' 或 '/)'。
  
  (?:pattern)匹配 pattern 但不獲取匹配結果,也就是說這是一個非獲取匹配,不進行存儲供以后使用。這在使用 chr(34)或chr(34) 字符 () 來組合一個模式的各個部分是很有用。例如, 'industr(?:yies) 就是一個比 'industryindustries' 更簡略的表達式。
  
  (?=pattern)正向預查,在任何匹配 pattern 的字符串開始處匹配查找字符串。這是一個非獲取匹配,也就是說,該匹配不需要獲取供以后使用。例如,'Windows (?=9598NT2000)' 能匹配chr(34)windows 2000chr(34)中的chr(34)Windowschr(34),但不能匹配chr(34)Windows3 .1chr(34)中chr(34)Windowschr(34)。
  預查不消耗字符,也就是說,在一個匹配發生后,在最后一次匹配之后立即開始下一次匹配的搜索,而不是從包含預查的字符之后開始。
  
  (?!pattern)負向預查,在任何不匹配Negative lookahead matches the search string at any point where a string not matching pattern 的字符串開始處匹配查找字符串。這是一個非獲取匹配,也就是說,該匹配不需要獲取供以后使用。例如'Windows(?!9598NT2000)' 能匹配 chr(34)Windows 3.1chr(34) 中的 chr(34)Windowschr(34),但不能匹配 chr(34)Windows 2000chr(34) 中的 chr(34)Windowschr(34)。預查不消耗字符,也就是說,在一個匹配發生后,在最后一次匹配之后立即開始下一次匹配的搜索,而不是從包含預查的字符之后開始
  
  xy匹配 x 或 y。例如,'zfood' 能匹配 chr(34)zchr(34) 或 chr(34)foodchr(34)。'(zf)ood' 則匹配 chr(34)zoodchr(34) 或 chr(34)foodchr(34)。
  
  [xyz]字符集合。匹配所包含的任意一個字符。例如, '[abc]' 可以匹配 chr(34)plainchr(34) 中的 'a'。
  
  [^xyz]負值字符集合。匹配未包含的任意字符。例如, '[^abc]' 可以匹配 chr(34)plainchr(34) 中的'p'。
  
  [a-z]字符范圍。匹配指定范圍內的任意字符。例如,'[a-z]' 可以匹配 'a' 到 'z' 范圍內的任意小寫字母字符。
  
  [^a-z]負值字符范圍。匹配任何不在指定范圍內的任意字符。例如, '[^a-z]' 可以匹配任何不在 'a' 到 'z' 范圍內的任意字符。
  
  /b匹配一個單詞邊界,也就是指單詞和空格間的位置。例如, 'er/b' 可以匹配chr(34)neverchr(34) 中的 'er',但不能匹配 chr(34)verbchr(34) 中的 'er'。
  
  /B匹配非單詞邊界。'er/B' 能匹配 chr(34)verbchr(34) 中的 'er

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 一区国产在线 | 日日草夜夜操 | 国产永久免费观看 | 亚欧美一区二区 | 黄色成人小视频 | 操嫩草 | 久久久久免费精品国产小说色大师 | 欧美一级黄视频 | 久久久久北条麻妃免费看 | 成人免费网站在线观看 | 一本色道久久99精品综合蜜臀 | 免费一区二区三区 | 国产jjizz一区二区三区视频 | 国产精品1区2区在线观看 | 日本在线一区二区 | 少妇一级淫片高潮流水电影 | 日韩精品一二三区 | 鲁久久 | 中文字幕极速在线观看 | 国产妇女乱码一区二区三区 | 国产精品美女久久久久久不卡 | 毛片在线免费视频 | 欧美一级一区二区三区 | 国产瑟瑟视频 | 久久精品伊人网 | 成年性羞羞视频免费观看 | 日本不卡一区二区三区在线 | 日韩一级网站 | 中文字幕国产亚洲 | 久久成人精品视频 | 久久久成人动漫 | 国产麻豆交换夫妇 | 久久久久国产精品久久久久 | 成年人免费高清视频 | 免费国产一区二区视频 | 久久久一区二区 | 在线免费观看麻豆 | 羞羞的视频在线 | 免费a级观看 | 中文字幕极速在线观看 | 国产精品剧情一区二区三区 |