網站地圖 | RSS訂閱 老鐵博客 - 上海SEO優化|上海網站建設|蜘蛛池出租|站群代搭建
你的位置:首頁 ? 前端腳本 ? 正文

java正則表達式,java正則表達式用法

2020-4-1 14:26:54 | 作者:老鐵SEO | 0個評論 | 人瀏覽

  也就是用正則來匹配fund="數字"stock="數字"這些內容,并且捕捉其中的數字的意思,對吧


  varreg=/\s+?(?:fund|stock)=\"(\d+)\"/gi;<


  >


  這是親測結果:


  可以在這里在線測試:


  在線正則表達式測試


  java正則表達式用法


  建議自己查J2SE的APIjava.util.regexPattern


  ×××××××××××××××××××××××××××××××××××××××××××××


  我給你貼出來


  ×××××××××××××××××××××××××××××××××××××××××××××


  publicfinalclassPatternextendsObjectimplementsSerializable正則表達式的編譯表示形式。


  指定為字符串的正則表達式必須首先被編譯為此類的實例。然后,可將得到的模式用于創建Matcher對象,依照正則表達式,該對象可以與任意字符序列匹配。執行匹配所涉及的所有狀態都駐留在匹配器中,所以多個匹配器可以共享同一模式。


  因此,典型的調用順序是


  Patternp=Patternpile("a*b");


  Matcherm=p.matcher("aaaaab");


  booleanb=m.matches();在僅使用一次正則表達式時,可以方便地通過此類定義matches方法。此方法編譯表達式并在單個調用中將輸入序列與其匹配。語句


  booleanb=Pattern.matches("a*b","aaaaab");等效于上面的三個語句,盡管對于重復的匹配而言它效率不高,因為它不允許重用已編譯的模式。


  此類的實例是不可變的,可供多個并發線程安全使用。Matcher類的實例用于此目的則不安全。


  正則表達式的構造摘要


  構造匹配


  字符


  x字符x


  \\反斜線字符


  \0n帶有八進制值0的字符n(0<=n<=7)


  \0nn帶有八進制值0的字符nn(0<=n<=7)


  \0mnn帶有八進制值0的字符mnn(0<=m<=3、0<=n<=7)


  \xhh帶有十六進制值0x的字符hh


  \uhhhh帶有十六進制值0x的字符hhhh


  \t制表符('\u0009')


  \n新行(換行)符('\u000A')


  \r回車符('\u000D')


  \f換頁符('\u000C')


  \a報警(bell)符('\u0007')


  \e轉義符('\u001B')


  \cx對應于x的控制符


  字符類


  [abc]a、b或c(簡單類)


  [^abc]任何字符,除了a、b或c(否定)


  [a-zA-Z]a到z或A到Z,兩頭的字母包括在內(范圍)


  [a-d[m-p]]a到d或m到p:[a-dm-p](并集)


  [a-z&&[def]]d、e或f(交集)


  [a-z&&[^bc]]a到z,除了b和c:[ad-z](減去)


  [a-z&&[^m-p]]a到z,而非m到p:[a-lq-z](減去)


  預定義字符類


  .任何字符(與行結束符可能匹配也可能不匹配)


  \d數字:[0-9]


  \D非數字:[^0-9]


  \s空白字符:[\t\n\x0B\f\r]


  \S非空白字符:[^\s]


  \w單詞字符:[a-zA-Z_0-9]


  \W非單詞字符:[^\w]


  POSIX字符類(僅US-ASCII)


  \p{Lower}小寫字母字符:[a-z]


  \p{Upper}大寫字母字符:[A-Z]


  \p{ASCII}所有ASCII:[\x00-\x7F]


  \p{Alpha}字母字符:[\p{Lower}\p{Upper}]


  \p{Digit}十進制數字:[0-9]


  \p{Alnum}字母數字字符:[\p{Alpha}\p{Digit}]


  \p{Punct}標點符號:!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~


  \p{Graph}可見字符:[\p{Alnum}\p{Punct}]


  \p{Print}可打印字符:[\p{Graph}\x20]


  \p{Blank}空格或制表符:[\t]


  \p{Cntrl}控制字符:[\x00-\x1F\x7F]


  \p{XDigit}十六進制數字:[0-9a-fA-F]


  \p{Space}空白字符:[\t\n\x0B\f\r]


  java.lang.Character類(簡單的java字符類型)


  \p{javaLowerCase}等效于java.lang.Character.isLowerCase()


  \p{javaUpperCase}等效于java.lang.Character.isUpperCase()


  \p{javaWhitespace}等效于java.lang.Character.isWhitespace()


  \p{javaMirrored}等效于java.lang.Character.isMirrored()


  Unicode塊和類別的類


  \p{InGreek}Greek塊(簡單塊)中的字符


  \p{Lu}大寫字母(簡單類別)


  \p{Sc}貨幣符號


  \P{InGreek}所有字符,Greek塊中的除外(否定)


  [\p{L}&&[^\p{Lu}]]所有字母,大寫字母除外(減去)


  邊界匹配器


  ^行的開頭


  $行的結尾


  \b單詞邊界


  \B非單詞邊界


  \A輸入的開頭


  \G上一個匹配的結尾


  \Z輸入的結尾,僅用于最后的結束符(如果有的話)


  \z輸入的結尾


  Greedy數量詞


  X?X,一次或一次也沒有


  X*X,零次或多次


  X+X,一次或多次


  X{n}X,恰好n次


  X{n,}X,至少n次


  X{n,m}X,至少n次,但是不超過m次


  Reluctant數量詞


  X??X,一次或一次也沒有


  X*?X,零次或多次


  X+?X,一次或多次


  X{n}?X,恰好n次


  X{n,}?X,至少n次


  X{n,m}?X,至少n次,但是不超過m次


  Possessive數量詞


  X?+X,一次或一次也沒有


  X*+X,零次或多次


  X++X,一次或多次


  X{n}+X,恰好n次


  X{n,}+X,至少n次


  X{n,m}+X,至少n次,但是不超過m次


  Logical運算符


  XYX后跟Y


  X|YX或Y


  (X)X,作為捕獲組


  Back引用


  \n任何匹配的nth捕獲組


  引用


  \Nothing,但是引用以下字符


  \QNothing,但是引用所有字符,直到\E


  \ENothing,但是結束從\Q開始的引用


  特殊構造(非捕獲)


  (?:X)X,作為非捕獲組


  (?idmsux-idmsux)Nothing,但是將匹配標志由on轉為off


  (?idmsux-idmsux:X)X,作為帶有給定標志on-off的非捕獲組


  (?=X)X,通過零寬度的正lookahead


  (?!X)X,通過零寬度的負lookahead


  (?<=X)X,通過零寬度的正lookbehind


  (?(?>X)X,作為獨立的非捕獲組


  --------------------------------------------------------------------------------


  反斜線、轉義和引用


  反斜線字符('\')用于引用轉義構造,如上表所定義的,同時還用于引用其他將被解釋為非轉義構造的字符。因此,表達式\\與單個反斜線匹配,而\{與左括號匹配。


  在不表示轉義構造的任何字母字符前使用反斜線都是錯誤的;它們是為將來擴展正則表達式語言保留的。可以在非字母字符前使用反斜線,不管該字符是否非轉義構造的一部分。


  根據JavaLanguageSpecification的要求,Java源代碼的字符串中的反斜線被解釋為Unicode轉義或其他字符轉義。因此必須在字符串字面值中使用兩個反斜線,表示正則表達式受到保護,不被Java字節碼編譯器解釋。例如,當解釋為正則表達式時,字符串字面值"\b"與單個退格字符匹配,而"\\b"與單詞邊界匹配。字符串字面值"\(hello\)"是非法的,將導致編譯時錯誤;要與字符串(hello)匹配,必須使用字符串字面值"\\(hello\\)"。


  字符類


  字符類可以出現在其他字符類中,并且可以包含并集運算符(隱式)和交集運算符(&&)。并集運算符表示至少包含其某個操作數類中所有字符的類。交集運算符表示包含同時位于其兩個操作數類中所有字符的類。


  字符類運算符的優先級如下所示,按從最高到最低的順序排列:


  1字面值轉義\x


  2分組[...]


  3范圍a-z


  4并集[a-e][i-u]


  5交集[a-z&&[aeiou]]


  注意,元字符的不同集合實際上位于字符類的內部,而非字符類的外部。例如,正則表達式.在字符類內部就失去了其特殊意義,而表達式-變成了形成元字符的范圍。


  行結束符


  行結束符是一個或兩個字符的序列,標記輸入字符序列的行結尾。以下代碼被識別為行結束符:


  新行(換行)符('\n')、


  后面緊跟新行符的回車符("\r\n")、


  單獨的回車符('\r')、


  下一行字符('\u0085')、


  行分隔符('\u2028')或


  段落分隔符('\u2029)。


  如果激活UNIX_LINES模式,則新行符是惟一識別的行結束符。


  如果未指定DOTALL標志,則正則表達式.可以與任何字符(行結束符除外)匹配。


  默認情況下,正則表達式^和$忽略行結束符,僅分別與整個輸入序列的開頭和結尾匹配。如果激活MULTILINE模式,則^在輸入的開頭和行結束符之后(輸入的結尾)才發生匹配。處于MULTILINE模式中時,$僅在行結束符之前或輸入序列的結尾處匹配。


  組和捕獲


  捕獲組可以通過從左到右計算其開括號來編號。例如,在表達式((A)(B(C)))中,存在四個這樣的組:


  1((A)(B(C)))


  2\A


  3(B(C))


  4(C)


  組零始終代表整個表達式。


  之所以這樣命名捕獲組是因為在匹配中,保存了與這些組匹配的輸入序列的每個子序列。捕獲的子序列稍后可以通過Back引用在表達式中使用,也可以在匹配操作完成后從匹配器檢索。


  與組關聯的捕獲輸入始終是與組最近匹配的子序列。如果由于量化的緣故再次計算了組,則在第二次計算失敗時將保留其以前捕獲的值(如果有的話)例如,將字符串"aba"與表達式(a(b)?)+相匹配,會將第二組設置為"b"。在每個匹配的開頭,所有捕獲的輸入都會被丟棄。


  以(?)開頭的組是純的非捕獲組,它不捕獲文本,也不針對組合計進行計數。


  java正則表達式詳解


  ^取反,&&邏輯與(并且)


  [^456]匹配一個非4非5非6的任意字符,可以匹配:a、x、1、8、好、中……


  [a-o&&[def]]等價于[def],可以匹配:d、e、f


  [a-d&&[^bc]]等價于[ad],可以匹配:a、d


  以上都是匹配的單個字符,使用*、+、{}等可以匹配連續的多個字符


  (?s)開啟單行模式DOTALL讓.號匹配任意字符


  (.)任意字符并捕獲在第一組


  (?=.*\1)這是斷言,表示后面內容將是任意個字符加上第一組所捕獲的內容


  這樣子,如果這整個式子匹配到,表示,第一個捕獲組內容在字符串中,至少出現兩次,替換為""空串.


  java正則表達式匹配字符串


  java正則提取需要用到Matcher類,下面給出案例示例供參考


  需要提取車牌號中最后一個數字,比如說:蘇A7865提取5,蘇A876X提取6


  importjava.util.regex.Matcher;


  importjava.util.regex.Pattern;


  publicclassTest{


  publicstaticvoidmain(String[]args){


  Strings="A876X";


  //把要匹配的字符串寫成正則表達式,然后要提取的字符使用括號括起來


  //在這里,我們要提取最后一個數字,正則規則就是“一個數字加上大于等于0個非數字再加上結束符”


  Patternpattern=Patternpile("(\\d)[^\\d]*$");


  Matchermatcher=pattern.matcher(s);


  if(matcher.find())


  System.out.println(matcher.group(1));


  }


  }<


  >


  關于Matcher中的幾個方法說明:


  Mathcer.start()


  Matcher.end()


  Matcher.group()


  當使用matches(),lookingAt(),find()執行匹配操作后,就可以利用以上三個方法得到更詳細的信息.


  start()返回匹配到的子字符串在字符串中的索引位置.


  end()返回匹配到的子字符串的最后一個字符在字符串中的索引位置.


  group()返回匹配到的子字符串


  示例代碼如下,具體功能請參考注釋


  Patternp=Patternpile(“\d+”);


  Matcherm=p.matcher(“aaa2223bb”);


  m.find();//匹配2223


  m.start();//返回3


  m.end();//返回7,返回的是2223后的索引號


  m.group();//返回2223


  Mathcerm2=p.matcher(“2223bb”);


  m2.lookingAt();//匹配2223


  m2.start();//返回0,由于lookingAt()只能匹配前面的字符串,所以當使用lookingAt()匹配時,start()方法總是返回0


  m2.end();//返回4


  m2.group();//返回2223


  Matcherm3=p.matcher(“2223”);//如果Matcherm3=p.matcher(“2223bb”);那么下面的方法出錯,因為不匹配返回false


  m3.matches();//匹配整個字符串


  m3.start();//返回0


  m3.end();//返回3,原因相信大家也清楚了,因為matches()需要匹配所有字符串


  m3.group();//返回2223<


  >


  另外,Mathcer類中start(),end(),group()均有一個重載方法它們是start(inti),end(inti),group(inti)專用于分組操作,Mathcer類還有一個groupCount()用于返回有多少組.


  示例如下:


  Patternp=Patternpile(“([a-z]+)(\d+)”);


  Matcherm=p.matcher(“aaa2223bb”);


  m.find();//匹配aaa2223


  m.groupCount();//返回2,因為有2組


  m.start(1);//返回0返回第一組匹配到的子字符串在字符串中的索引號


  m.start(2);//返回3


  m.end(1);//返回3返回第一組匹配到的子字符串的最后一個字符在字符串中的索引位置.


  m.end(2);//返回7


  m.group(1);//返回aaa,返回第一組匹配到的子字符串


  m.group(2);//返回2223,返回第二組匹配到的子字符串<


  >


  注意:只有當匹配操作成功,才可以使用start(),end(),group()三個方法,否則會拋出java.lang.IllegalStateException,也就是當matches(),lookingAt(),find()其中任意一個方法返回true時,才可以使用。


  java正則表達式提取字符串中的數字


  Strings="274750.4%1384136311-1023:24";


  Patternp=Patternpile("(?:)(.*?)(?:)");


  Matcherm=p.matcher(s);


  while(m.find()){


  System.out.println(m.group(1));


  }<


  >


  • 本文來自: 老鐵博客,轉載請保留出處!歡迎發表您的評論
  • 相關標簽:
  • 已有0位網友發表了一針見血的評論,你還等什么?

    必填

    選填

    記住我,下次回復時不用重新輸入個人信息

    必填,不填不讓過哦,嘻嘻。

    ◎歡迎參與討論,請在這里發表您的看法、交流您的觀點。

    相關推薦

    色情激情片日本大全