<dfn id="w48us"></dfn><ul id="w48us"></ul>
  • <ul id="w48us"></ul>
  • <del id="w48us"></del>
    <ul id="w48us"></ul>
  • JDK的正則表達(dá)

    時(shí)間:2024-06-05 20:19:24 SUN認(rèn)證 我要投稿
    • 相關(guān)推薦

    JDK的正則表達(dá)

      jdk是 Java 語(yǔ)言的軟件開(kāi)發(fā)工具包,主要用于移動(dòng)設(shè)備、嵌入式設(shè)備上的java應(yīng)用程序。下面小編為大家整理了關(guān)于JDK的正則表達(dá),一起來(lái)看看吧:

      一、概述

      正則表達(dá)式是Java處理字符串、文本的重要工具。

      Java對(duì)正則表達(dá)式的處理集中在以下兩個(gè)兩個(gè)類:

      java.util.regex.Matcher 模式類:用來(lái)表示一個(gè)編譯過(guò)的正則表達(dá)式。

      java.util.regex.Pattern 匹配類:用模式匹配一個(gè)字符串所表達(dá)的抽象結(jié)果。

      (新版的Java Doc有解釋。)

      比如一個(gè)簡(jiǎn)單例子:

      Java代碼

      import java.util.regex.Matcher;

      import java.util.regex.Pattern;

      public class RegxOperator {

      /**

      * @param args

      */

      public static void main(String[] args) {

      // TODO Auto-generated method stub

      Pattern p = Pattern.compile("f(.+?)k");

      Matcher m = p.matcher("fckfkkfkf");

      while (m.find()) {

      String s0 = m.group();

      String s1 = m.group(1);

      System.out.println(s0 + "||" + s1);

      }

      System.out.println("---------");

      m.reset("fucking!");

      while (m.find()) {

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

      }

      Pattern p1 = Pattern.compile("f(.+?)i(.+?)h");

      Matcher m1 = p1.matcher("finishabigfishfrish");

      while (m1.find()) {

      String s0 = m1.group();

      String s1 = m1.group(1);

      String s2 = m1.group(2);

      System.out.println(s0 + "||" + s1 + "||" + s2);

      }

      System.out.println("---------");

      Pattern p3 = Pattern

      .compile("(19|20)\\d\\d([- /.])(0[1-9]|1[012])\\2(0[1-9]|[12][0-9]|3[01])");

      Matcher m3 = p3

      .matcher("1900-01-01 2007/08/13 1900.01.01 1900 01 01 1900-01.01 1900 13 01 1900 02 31");

      while (m3.find()) {

      System.out.println(m3.group());

      }

      }

      }

      輸出結(jié)果:

      fck||c

      fkk||k

      ---------

      fuck

      finish||in||s

      fishfrish||ishfr||s

      ---------

      1900-01-01

      2007/08/13

      1900.01.01

      1900 01 01

      1900 02 31

      Java代碼

      import java.util.regex.Matcher;

      import java.util.regex.Pattern;

      public class Test {

      public static void main(String args[]) {

      String rawDate = "1900-01-01 2007/08/13 1900.01.01 1900 01 01 1900-01.01 1900 13 01 1900 02 31";

      String patternStr = "(\\d{4})[- /.](\\d{2})[- /.](\\d{2})";

      Pattern pattern = Pattern.compile(patternStr);

      Matcher matcher = pattern.matcher(rawDate);

      while(matcher.find()){

      System.out.println("full date is " + matcher.group());

      System.out.println("year is " + matcher.group(1));

      System.out.println("month is " + matcher.group(2));

      System.out.println("date is " + matcher.group(3));

      }

      }

      }

      full date is 1900-01-01

      year is 1900

      month is 01

      date is 01

      full date is 2007/08/13

      year is 2007

      month is 08

      date is 13

      full date is 1900.01.01

      year is 1900

      month is 01

      date is 01

      full date is 1900 01 01

      year is 1900

      month is 01

      date is 01

      full date is 1900-01.01

      year is 1900

      month is 01

      date is 01

      full date is 1900 13 01

      year is 1900

      month is 13

      date is 01

      full date is 1900 02 31

      year is 1900

      month is 02

      date is 31

      二、一些容易迷糊的問(wèn)題

      1、Java對(duì)反斜線處理的問(wèn)題

      在其他語(yǔ)言中,\\表示要插入一個(gè)字符\;

      在Java語(yǔ)言中,\\表示要插入正則表達(dá)式的反斜線,并且后面的字符有特殊意義。

      看API文檔:

      預(yù)定義字符類

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

      \d 數(shù)字:[0-9]

      \D 非數(shù)字: [^0-9]

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

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

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

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

      但是看看上面程序,對(duì)比下不難看出:

      \d在實(shí)際使用的時(shí)候就寫成了 \\d;

      在Java正則表達(dá)式中,如果要插入一個(gè)\字符,則需要在正則表達(dá)式中寫成\\\\,原因是下面的APIDoc定義\\表示一個(gè)反斜線。

      但是如果在正則表示式中表示回車換行等,則不需要多添加反斜線了。比如回車\r就寫作\r.

      字符

      x 字符 x

      \\ 反斜線字符

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

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

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

      \xhh 帶有十六進(jìn)制值 0x 的字符 hh

      \uhhhh 帶有十六進(jìn)制值 0x 的字符 hhhh

      \t 制表符 ('\u0009')

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

      \r 回車符 ('\u000D')

      \f 換頁(yè)符 ('\u000C')

      \a 報(bào)警 (bell) 符 ('\u0007')

      \e 轉(zhuǎn)義符 ('\u001B')

      \cx 對(duì)應(yīng)于 x 的控制符

      2、Matcher.find():嘗試查找與模式匹配的字符序列的下一個(gè)子序列。此方法從字符序列的開(kāi)頭開(kāi)始,如果該方法的前一次調(diào)用成功了并且從那時(shí)開(kāi)始匹配器沒(méi)有被重置,則從以前匹配操作沒(méi)有匹配的第一個(gè)字符開(kāi)始,即如果前一次找到與模式匹配的子序列則這次從這個(gè)子序列后開(kāi)始查找。

      3、Matcher.matchers():判斷整個(gè)字符序列與模式是否匹配。當(dāng)連續(xù)用Matcher對(duì)象檢查多個(gè)字符串時(shí)候,可以使用

      Matcher.reset():重置匹配器,放棄其所有顯式狀態(tài)信息并將其添加位置設(shè)置為零。

      或者M(jìn)atcher.reset(CharSequence input) 重置此具有新輸入序列的匹配器。

      來(lái)重復(fù)使用匹配器。

      4、組的概念,這個(gè)概念很重要,組是用括號(hào)劃分的正則表達(dá)式,可以通過(guò)編號(hào)來(lái)引用組。組號(hào)從0開(kāi)始,有幾對(duì)小括號(hào)就表示有幾個(gè)組,并且組可以嵌套,組號(hào)為0的表示整個(gè)表達(dá)式,組號(hào)為1的表示第一個(gè)組,依此類推。

      例如:A(B)C(D)E正則式中有三組,組0是ABCDE,組1是B,組2是D;

      A((B)C)(D)E正則式中有四組:組0是ABCDE,組1是BC,組2是B;組3是C,組4是D。

      int groupCount():返回匹配其模式中組的數(shù)目,不包括第0組。

      String group():返回前一次匹配操作(如find())的第0組。

      String group(int group):返回前一次匹配操作期間指定的組所匹配的子序列。如果該匹配成功,但指定組未能匹配字符序列的任何部分,則返回 null。

      int start(int group):返回前一次匹配操作期間指定的組所匹配的子序列的初始索引。

      int end(int group):返回前一次匹配操作期間指定的組所匹配的子序列的最后索引+1。

      5、匹配的范圍的控制

      最變態(tài)的就要算lookingAt()方法了,名字很讓人迷惑,需要認(rèn)真看APIDoc。

      start() 返回以前匹配的初始索引。

      end() 返回最后匹配字符之后的偏移量。

      public boolean lookingAt()嘗試將從區(qū)域開(kāi)頭開(kāi)始的輸入序列與該模式匹配。

      與 matches 方法類似,此方法始終從區(qū)域的開(kāi)頭開(kāi)始;與之不同的是,它不需要匹配整個(gè)區(qū)域。

      如果匹配成功,則可以通過(guò) start、end 和 group 方法獲取更多信息。

      返回:

      當(dāng)且僅當(dāng)輸入序列的前綴匹配此匹配器的模式時(shí)才返回 true。

      6、Pattern標(biāo)記

      Pattern類的靜態(tài)方法

      static Pattern compile(String regex, int flags)

      將給定的正則表達(dá)式編譯到具有給定標(biāo)志的模式中。

      其中的flags參數(shù)就是Pattern標(biāo)記,這個(gè)標(biāo)記在某些時(shí)候非常重要。

      Pattern.CANON_EQ

      啟用規(guī)范等價(jià)。

      Pattern.CASE_INSENSITIVE

      啟用不區(qū)分大小寫的匹配。

      Pattern.COMMENTS

      模式中允許空白和注釋。

      Pattern.DOTALL

      啟用 dotall 模式。

      Pattern.LITERAL

      啟用模式的字面值分析。

      Pattern.MULTILINE

      啟用多行模式。

      Pattern.UNICODE_CASE

      啟用 Unicode 感知的大小寫折疊。

      Pattern.UNIX_LINES

      啟用 Unix 行模式。

      三、字符串的替換

      String.replace(char oldChar, char newChar)

      返回一個(gè)新的字符串,它是通過(guò)用 newChar 替換此字符串中出現(xiàn)的所有 oldChar 而生成的。

      String.replace(CharSequence target, CharSequence replacement)

      使用指定的字面值替換序列替換此字符串匹配字面值目標(biāo)序列的每個(gè)子字符串。

      String.replaceAll(String regex, String replacement)

      使用給定的 replacement 字符串替換此字符串匹配給定的正則表達(dá)式的每個(gè)子字符串。

      String.replaceFirst(String regex, String replacement)

      使用給定的 replacement 字符串替換此字符串匹配給定的正則表達(dá)式的第一個(gè)子字符串。

      StringBuffer.replace(int start, int end, String str)

      使用給定 String 中的字符替換此序列的子字符串中的字符。

      StringBuilder.replace(int, int, java.lang.String)

      使用給定 String 中的字符替換此序列的子字符串中的字符。

      Matcher.replaceAll(String replacement)

      替換模式與給定替換字符串相匹配的輸入序列的每個(gè)子序列。

      Matcher.replaceFirst(String replacement)

      替換模式與給定替換字符串匹配的輸入序列的第一個(gè)子序列。

      四、字符串的切分

      String[] split(String regex)

      根據(jù)給定的正則表達(dá)式的匹配來(lái)拆分此字符串。

      String[] split(String regex, int limit)

      根據(jù)匹配給定的正則表達(dá)式來(lái)拆分此字符串。

      當(dāng)然,還有一個(gè)StringTokenizer類,可以用來(lái)切分字符串,但是現(xiàn)在SUN已經(jīng)不推薦使用了。

      轉(zhuǎn)變下思路,其實(shí)用正則表達(dá)式也可以達(dá)到將字符串切分為段的目的。

    【JDK的正則表達(dá)】相關(guān)文章:

    SQL語(yǔ)句中的正則表達(dá)示07-28

    javascript正則表達(dá)式06-10

    PHP 正則表達(dá)式總結(jié)10-05

    Oracle正則表達(dá)式匯集09-21

    JAVA正則表達(dá)式語(yǔ)法大全06-12

    java中正則表達(dá)式概述08-22

    Linux中正則表達(dá)式與文件處理07-20

    JavaScript基于正則表達(dá)式數(shù)字判斷函數(shù)06-14

    PHP 正則表達(dá)式后面接的/isU, /is, /s參數(shù)含義詳解10-12

    關(guān)于php正則之函數(shù) preg-replace()參數(shù)說(shuō)明11-05

    主站蜘蛛池模板: 亚洲处破女AV日韩精品| 久久无码精品一区二区三区| 午夜精品射精入后重之免费观看 | 无码精品A∨在线观看| 国产69精品久久久久99尤物| 精品亚洲麻豆1区2区3区| 欧美日韩成人精品久久久免费看| 久久99热精品| 精品国产一区二区三区久久久狼| 亚洲AV永久无码精品一区二区| 国产精品人人做人人爽| 欧美久久精品一级c片片| 97久久超碰国产精品旧版| 日韩精品无码一区二区中文字幕| 亚洲福利精品电影在线观看| 精品国产一区二区22| 91久久精品国产成人久久| 国产精品一久久香蕉产线看| 国产人妖乱国产精品人妖| 亚洲精品无码久久久久去q | 国产av无码专区亚洲国产精品| 国产精品视频第一区二区三区| 亚洲精品第一国产综合精品99| 精品无人区无码乱码毛片国产 | 亚洲欧美日韩精品| 国产精品无码久久综合| 亚洲精品国产精品乱码不卡√| 日本一区二区三区精品国产| 国产精品自在欧美一区| 国产精品99久久久久久董美香| 亚洲国产精品久久久久| 老司机69精品成免费视频| 国产成人精品日本亚洲专| 99re8这里有精品热视频免费| 国产精品毛片无遮挡| 国产精品高清一区二区三区 | 国产精品男男视频一区二区三区| 国产精品99精品久久免费| 亚洲第一永久AV网站久久精品男人的天堂AV | 久久精品国产亚洲av日韩| 色一乱一伦一图一区二区精品|