亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

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

徹底研究 Java 中的正則表達式

2019-11-18 13:17:59
字體:
來源:轉載
供稿:網友

  /*以下是我最近研究正則表達式的成果希望能對大家有幫助。其中也有我碰到的不明白之處,各位有精通的請發mail給我講講。還有有誰對javascript的正則表達式精通請給大家發一下吧。這些東東都是Javadoc上有的,還有一些是我在java.sun.com/docs/books/tutorial/extra/regex/index.Html上看到的,我建議對正則表達式感愛好的不妨上去看看,很不錯。
  */
  package testreg;
  import java.util.regex.Matcher;
  import java.util.regex.Pattern;
  
  /**
  * <p>Title: 正則表達式的研究</p>
  * <p>Description:
  * 最近在工作中經常用到一些正則表達式的使用問題,到網上去找介紹大多是一鱗半爪。求人不如求已。一狠心,自己看!這兩天利用我們項目兩期之間的一點空閑對J2SE所支持的正則表達式來了個徹底研究!代價是……就是浪廢了部門近十二張白紙。閑話少說,書歸正傳。
  * 原理:
  *   正則表達式的原理是有限狀態自動機,自動機內部有有限個狀態,有一個初始狀態,有一個結束狀態。自動機根據輸入和自身內部的當前狀態來決定下一步于什么。呵呵,這是很久以前學的東東了也記不清了,大家只作參照吧。
  * Java中的正則表達式:
  *   從J2SE1.4起Java增加了對正則表達式的支持就是java.util.regex包,這個包中主要有3個類:Pattern,代表模式,就是正則表達式自身,Matcher,是一個有限狀態自動機,其實大多數的活還是讓Pattern類于了,Matcher往往只是簡單的調用Pattern,不知道這是什么模式。這兩個類寫的都很經典,還有不少算法在內值得有功力的人仔細研究一下。另一個是一個異常類當所用正則表達式不正確時拋出,是運行時異常。
  * 幾個難點:
  *  1.line terminator
  *   line terminator 中文意終結符,是指一個或兩個字符組成的字符序列。java中的
  *   所有line terminator:
  *   A newline (line feed) character ('/n'),
  *   -----------換行符(0A)
  *   A carriage-return character followed immediately by a newline character ("/r/n"),
  *   -----------回車+換行(0D0A)
  *   A standalone carriage-return character ('/r'),
  *   -----------回車(0D)
  *   A next-line character ('/u0085'),
  *   ------------下一行符?(?表示我也不知道是什么,請大家明白的給我發mail
  *   A line-separator character ('/u2028'), or
  *   ------------行分隔符?
  *   A paragraph-separator character ('/u2029).
  *   ------------段落分隔符?
  *   If UNIX_LINES mode is activated, then the only line terminators recognized are newline characters.
  *   假如使用unix模式則只有/n被認為是line terminator,也就是在使用pattern時如下:
  *   Pattern p=Pattern.compile("正則表達式",Pattern.UNIX_LINE);
  *   或 Pattern p=Pattern.compile("(?d)正則表達式")
  *   "."匹配除line terminator以外的所有字符(未指定DOTALL時)
  *   在指定DOTAll模式時"."匹配所有字符
  *  2.Quantifiers,Greedy,RelUCtant and Possessive.
  *   這幾個詞不太好譯,原文是Greedy Quantifiers,Reluctant Quantifiers and Possessive Quantifiers憑我這點英語我只好譯作貪婪的量子,不情愿的量子和占有欲強的量子?這也太搞笑了好在我理解了他們的意思。這點等下我細說。
  *  3. 對于[a-zA-Z],[a-d[h-i]],[^a-f],[b-f&&[a-z]],[b-f&&[^cd]]等形式的理解對于上述,原文用range,union,negation,intersection,suBTraction等來描述range表是范圍,union是并集,negation是取反,intersection是交集,subtraction是……是減法??反正是減去一部分的意思
  *   range    a-z 從a到z的小寫字母
  *   negation  [^a-f]除了a-f之外所有的,全集是所有字符
  *   union    [a-d[h-i]] a-d并h-i
  *   subtraction [b-f&&[^cd]] 就是b-f中除了cd以外的都是
  *   intersection[b-f&&[a-z]] 就是b-f與a-z中的公共部分
  *   我總結了一下,其實就是方括號表示一個集合,集合中的元素用列舉法表示如[abcd],但太多了怎么為?總不能把從a到z的全列舉吧?那就用a-z表示且省略了方括號,交集用&&表示,并集省略,差集(對subtraction譯成差集還差不多)用交集和取反來表示。所以,以上的可表示為:
  *   [[a-z][A-Z]],[[a-d][h-i]],[^a-f],[[b-f]&&[a-z]],[[b-f]&&[^cd]]
  *   這樣是不是和我們的習慣相符了.
  *  4.各個標志的意義
  *   在生成pattern時可以同時使用幾個標志來指定進行匹配時的方案。
  *   用法形如:Pattern p=Pattern.compile(".*a?",Pattern.UNIX_LINES);
  *   當同時指定多個標志時可以使用""操作符連接如:
  *   Pattern p=Pattern.compile(".*a?,Pattern.UNIX_LINESPattern.DOTALL);
  *   也可以在表達式中指定如:
  *   Pattern p=Pattern.compile("(?d).*a?");
  *   Pattern p=Pattern.compile("(?d)(?s).*a?");
  *   以上兩個定義和前面兩個對應等價
  *   所有的標志如下:
  *   Constant        Equivalent Embedded Flag EXPRession
  Pattern.CANON_EQ       None Enables canonical equivalence
  Pattern.CASE_INSENSITIVE   (?i) Enables case-insensitive matching
  Pattern.COMMENTS       (?x) Permits whitespace and comments in pattern.
  Pattern.MULTILINE       (?m) Enables multiline mode.
  Pattern.DOATALL        (?s) Enables dotall mode
  Pattern.UNICODE_CASE     (?u) Enables Unicode-aware case folding.
  Pattern.UNIX_LINES      (?d) Enables Unix lines mode
  
  CANON_EQ 指定使用規范等價模式?這個我理解的也有限,是不是說只要指定了這個模式則ascii碼的'a'就可以和unicode的'a'還有XXX碼的'a'相等?請教各位。(mail to me)
  
  CASE_INSENSITIVE 指定使用大小寫不敏感的匹配模式,這個好理解,但要注重這個標志只是對ascii碼有效,要使unicode在比較時也忽略大小寫要同時指定UNICODE_CASE,就是要指定CASE_INSENSITIVEUNICODE_CASE或使用(?i)(?u)
  
  COMMENTS 指定使用注釋和忽略空白,也就是".*a"==". *a #this is comments"我想這個在正則表達式很大,而且是在文件中輸入時比較有用,平時我看也用不上。
  
  MULTILINE In multiline mode the expressions ^ and $ match just after
  or just before, respectively, a line terminator or the end of the
  input sequence. By default these expressions only match at the beginning
  and the end of the entire input sequence
  指定使用多行匹配模式,在默認模式下,^和$分別只匹配一個輸入的開始和結束。
  在這種模式下,^和$ 除了匹配整個輸入的開始和結束外還匹配一個line terminator的后邊和前邊(不是前邊和后邊,就是說^匹配line terminator的后邊$匹配line terminator的前邊。
  
  DOATALL 如指定了這個模式則"."可匹配任何字符包括line terminator UNIX_LINES 指定這個模式時只有/n被認為是line terminator而/r和/r/n都不是其他的我一時想不起來了,在具體介紹時再說吧。
  </p>
  /
  public class TestReg2
  {
  
  public static void main(String[] args)
  {
  String str1 = "";
  Object str = "";
  //注重:/r,/n,/b等轉義字符在java字符串常量中要寫成//r,//n,//b等,否則編譯都過不去
  ///s匹配/r,/n,/r和空格
  System.out.println("http://s匹配//r,//n,//r和空格 "+" /t/n/r".matches("http://s{4}"));
  ///S和/s互逆
  System.out.println("http://S和//s互逆 "+"/".matches("http://S"));
  //.不匹配/r和/n
  System.out.println(".不匹配//r和//n "+"/r".matches("."));
  System.out.println("/n".matches("."));
  
  ///w匹配字母,數字和下劃線
  System.out.println("http://w匹配字母,數字和下劃線 "+"a8_".matches("http://w//w//w"));
  ///W和/w互逆
  System.out.println("http://W和//w互逆 "+"&_".matches("http://W//w"));
  ///d匹配數字
  System.out.println("http://d匹配數字 "+"8".matches("http://d"));
  ///D與/d互逆
  System.out.println("http://D與//d互逆"+"%".matches("http://D"));
  //兩者都匹配但意文不同
  System.out.println("======================");
  System.out.println("表示//000a匹配//000a "+"/n".matches("/n"));
  System.out.println("表示//n匹配換行 "+"/n".matches("http://n"));
  System.out.println("======================");
  //兩者都匹配但意文不同
  System.out.println("/r".matches("/r"));
  System.out.println("/r".matches("http://r"));
  System.out.println("======================");
  //^匹配開頭
  System.out.println("^匹配開頭"+"hell".matches("^hell"));
  System.out.println("abc/nhell".matches("^hell"));
  //$匹配結束
  System.out.println("$匹配結束"+"my car/nabc".matches(".*ar$"));
  System.out.println("my car".matches(".*ar$"));

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91麻豆国产精品| 国产成人精品久久二区二区| 国产精品入口日韩视频大尺度| 亚洲欧美中文另类| 97在线观看免费高清| 日韩亚洲欧美成人| 91九色视频在线| 大胆欧美人体视频| 久久综合免费视频| 中文字幕亚洲欧美| 2019国产精品自在线拍国产不卡| 国产日韩欧美在线观看| 国产aⅴ夜夜欢一区二区三区| 亚洲人成77777在线观看网| 国产91露脸中文字幕在线| 精品福利在线视频| 欧美日韩在线一区| 国产视频久久久久| 北条麻妃久久精品| 精品无码久久久久久国产| 亚洲自拍偷拍第一页| 亚洲男人天堂古典| 色小说视频一区| 4p变态网欧美系列| 国产精品成人观看视频国产奇米| 国产精品久久999| 538国产精品一区二区免费视频| 国产精品久久久久久久午夜| 1769国内精品视频在线播放| 欧美久久精品一级黑人c片| 亚洲欧美成人精品| 国产精品久久久亚洲| 9.1国产丝袜在线观看| 国内精品小视频在线观看| 久久久免费在线观看| 国产日韩欧美黄色| 国产在线98福利播放视频| 国内久久久精品| www.亚洲男人天堂| 久热精品视频在线免费观看| 国产丝袜一区二区| 日韩h在线观看| 日韩有码视频在线| 国产欧美日韩精品在线观看| 热99精品里视频精品| 亚洲国产精品高清久久久| 亚洲图片欧洲图片av| 97国产精品久久| 一区二区三区视频免费在线观看| 2019av中文字幕| 国产精品久久久91| 亚洲成人三级在线| 日韩三级影视基地| 国产精品一区二区av影院萌芽| 欧美日韩aaaa| 久久精品国产久精国产一老狼| 欧美色道久久88综合亚洲精品| 国产欧美一区二区白浆黑人| 日韩欧美在线中文字幕| 亚洲免费视频在线观看| 日韩av日韩在线观看| 精品国产依人香蕉在线精品| 中文字幕亚洲综合久久筱田步美| 久久久精品国产网站| 欧美日韩中文在线观看| 亚洲美女自拍视频| 午夜精品久久久久久久99黑人| 久久久精品一区| 亚洲精品v天堂中文字幕| 久久久久久av| 色偷偷88888欧美精品久久久| 亚洲精品一区二区久| 欧美日韩国产成人在线观看| 欧美激情视频在线免费观看 欧美视频免费一| 5278欧美一区二区三区| 日韩亚洲精品视频| 成人免费网站在线观看| 色七七影院综合| 亚洲欧美在线第一页| 亚洲高清福利视频| 欧美性猛交xxxxx水多| 中文字幕亚洲激情| 国产日本欧美一区二区三区| 2020国产精品视频| 日韩av综合网站| 欧美性猛交xxxx免费看漫画| 91影院在线免费观看视频| 日韩精品视频免费专区在线播放| 国产成人午夜视频网址| 久久久久国产精品www| 在线日韩av观看| 亚洲成av人片在线观看香蕉| 欧美激情第三页| 国产在线视频2019最新视频| 亚洲精品电影在线观看| 亚洲综合一区二区不卡| 欧美日韩亚洲国产一区| 久久久久女教师免费一区| 91九色视频在线| 欧美巨乳美女视频| 精品国偷自产在线| 国产精品美女在线| 亚洲精品第一页| 国产精品电影久久久久电影网| 国产精品欧美一区二区三区奶水| 日韩精品欧美国产精品忘忧草| 国产精品九九九| 欧美亚洲第一区| 成年无码av片在线| 国产高清在线不卡| 欧美大片免费观看在线观看网站推荐| 欧美激情一区二区三区久久久| 国产精品久久久久久超碰| 一本大道香蕉久在线播放29| 日韩电影免费在线观看| 成人亲热视频网站| 日韩精品在线免费观看视频| 黑人与娇小精品av专区| 中文字幕不卡在线视频极品| 国产亚洲欧美另类中文| 亚洲成人三级在线| 国产精品v片在线观看不卡| 欧美亚洲视频在线观看| 久久综合久久八八| 欧美国产在线视频| 伊人久久精品视频| 国产成人涩涩涩视频在线观看| 欧美成人中文字幕在线| 成人午夜在线影院| 亚洲国产小视频在线观看| 国产精品黄页免费高清在线观看| www.99久久热国产日韩欧美.com| 欧美日韩免费区域视频在线观看| 成人国内精品久久久久一区| 国产精品久久久久久久7电影| 一区二区欧美日韩视频| 91九色国产社区在线观看| 日韩成人在线视频观看| 欧美一区亚洲一区| 日韩成人av在线播放| 91国产精品视频在线| 中文字幕欧美专区| 日韩精品亚洲视频| 日韩在线观看免费高清完整版| 国产女人精品视频| 久久综合久中文字幕青草| 国产亚洲精品激情久久| 激情av一区二区| 亚洲美女在线视频| 亚洲二区中文字幕| 久久久天堂国产精品女人| 隔壁老王国产在线精品| 久久久久北条麻妃免费看| 久久久久久av| 日韩一区二区三区xxxx| 国产丝袜一区二区三区| 亚洲已满18点击进入在线看片| 成人欧美一区二区三区在线| 亚洲网址你懂得| 日韩视频免费看| 久久在精品线影院精品国产| 国产精品久久av| 国产精品美女久久久久久免费| 国产精品扒开腿做爽爽爽视频|