<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    WEB開發 de 點滴

    by sanwish

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      38 隨筆 :: 0 文章 :: 4 評論 :: 0 Trackbacks

    正規表現

    正規表現とは、一定の規則に従って文字列を表す表現です。例えば、「abcdeg」「abcd」と文字列があったと時に、「ab*」と一定の規則を持たせた場合に、「abcdeg」「abcd」の2つの文字列が表現されます。
    主に、正規表現と聞くと、JavaScrptや、perlなどが代表的なところでしょう。昔から、Javaは文字列表現には適さなかったのです。しかし、JDK1.4からこの正規表現が使えるようになりました。これで、結構簡単なチェックロジックや、置換処理が簡単になったのかもしれません。

    ■実行環境

    OS Windows XP Professional
    J2SE SDK 1.4.1_01

    ■主な正規表現

    ● 文字クラス
    構文マッチ対象
    [ABC]A,B,Cのいずれか1文字
    [A-Z]A~Zまでのいずれか1文字
    [A-Za-z0-9]A~Z, a~z, 0-9までのいずれか1文字
    [^ABC]A,B.C以外の文字
    [^A-Z]A~Z以外の文字
    \w英數文字。[a-zA-Z0-9]と同様
    \W\w以外の文字
    \d數値文字。[0-9]と同等
    \D\d以外の文字
    \s空白文字
    \S\s以外の文字
    \n改行文字

    ● 繰り返し
    構文マッチ対象
    A+1個以上連続したA(A, AA, AAA, ...)
    A*0個以上連続したA( , A, AA, AAA, ...)
    A?0または1つの任意文字( , A, B, C, ...)
    A{5}5回繰り返し。 AAAAAと同じ
    A{3,}3回以上繰り返し。 AAA+と同じ
    A{3,5}3回以上5回以下繰り返し。 AAAA?A?と同じ

    ● 位置指定
    構文マッチ対象
    ^行の先頭
    $行の末尾

    では、上記の例を実際にプログラムにしてみましょう。

    ■サンプルプログラム

    ● ソースコード
    RegexTest.java
    /* RegexTest */
    import java.util.regex.*;
    
    public class RegexTest {
      public static void main(String[] args) {
        
        String value = null;
        // 構文 [ABC]
        value = "C";
        //value = "c";
        System.out.println("1  : " + Pattern.matches("[ABC]", value));
        
        // 構文 [A-Z]
        value = "T";
        //value = "t";
        System.out.println("2  : " + Pattern.matches("[A-Z]", value));
        
        // 構文 [A-Za-z0-9]
        value = "3";
        //value = "あ";
        System.out.println("3  : " + Pattern.matches("[A-Za-z0-9]", value));
        
        // 構文 [^ABC]
        value = "D";
        //value = "B";
        System.out.println("4  : " + Pattern.matches("[^ABC]", value));
        
        // 構文 [^A-Z]
        value = "c";
        //value = "C";
        System.out.println("5  : " + Pattern.matches("[^A-Z]", value));
        
        // 構文 \w
        value = "9";
        //value = "た";
        System.out.println("6  : " + Pattern.matches("\\w", value));
        
        // 構文 \W
        value = "た";
        //value = "t";
        System.out.println("7  : " + Pattern.matches("\\W", value));
        
        // 構文 \d
        value = "5";
        //value = "k";
        System.out.println("8  : " + Pattern.matches("\\d", value));
        
        // 構文 \D
        value = "k";
        //value = "3";
        System.out.println("9  : " + Pattern.matches("\\D", value));
        
        // 構文 \s
        value = " ";
        //value = "t";
        System.out.println("10 : " + Pattern.matches("\\s", value));
        
        // 構文 \S
        value = "t";
        //value = " ";
        System.out.println("11 : " + Pattern.matches("\\S", value));
        
        // 構文 \n
        value = "\n";
        //value = "t";
        System.out.println("12 : " + Pattern.matches("\\n", value));
        
        // 構文 A+
        value = "AAA";
        //value = "BBB";
        System.out.println("13 : " + Pattern.matches("A+", value));
        
        // 構文 A*
        value = "A";
        //value = "BBBBB";
        System.out.println("14 : " + Pattern.matches("A*", value));
        
        // 構文 A?
        value = "A";
        //value = "AA";
        System.out.println("15 : " + Pattern.matches("A?", value));
        
        // 構文 A{5}
        value = "AAAAA";
        //value = "AAAAAAA";
        System.out.println("16 : " + Pattern.matches("A{5}", value));
        
        // 構文 A{3,}
        value = "AAA";
        //value = "AA";
        System.out.println("17 : " + Pattern.matches("A{3,}", value));
        
        // 構文 A{3,5}
        value = "AAAA";
        //value = "AAAAAA";
        System.out.println("18 : " + Pattern.matches("A{3,5}", value));
        
        // 構文 ^take.*
        value = "takeoba";
        //value = "java";
        System.out.println("19 : " + Pattern.matches("^take.*", value));
        
        // 構文 *.oba$
        value = "takeoba";
        //value = "java";
        System.out.println("20 : " + Pattern.matches(".*oba$", value));
        
      }
    }
    

    ● コンパイルと実行結果
    C:\java>javac RegexTest.java
    
    C:\java>java RegexTest
    1  : true
    2  : true
    3  : true
    4  : true
    5  : true
    6  : true
    7  : true
    8  : true
    9  : true
    10 : true
    11 : true
    12 : true
    13 : true
    14 : true
    15 : true
    16 : true
    17 : true
    18 : true
    19 : true
    20 : true
    
    C:\java>
    

    上記をご覧の通り、すてべ true です。コメント部分と既存の部分を入れ替えてコンパイルし、実行すると全て false になります。これは、正規表現で表されていないため、false となります。また、下記の用に具體的な処理が可能です。

    ● ソースコード
    RegexTest2.java
    /* RegexTest2 */
    import java.util.regex.*;
    
    public class RegexTest2 {
      public static void main(String[] args) {
        
        // 攜帯電話電話番號チェック//String tel = "03-0000-9999";
        String tel = "090-0000-9999";
        System.out.println(Pattern.matches("090-[\\d]{4}?-[\\d]{4}?", tel));
        
        // メールアドレスチェック//String mail = "aaabbb.net";
        String mail = "aaa@bbb.co.jp";
        System.out.println(Pattern.matches(
          "[\\d[a-z]]+@[\\d[a-z]]+.[a-z]+|[\\d[a-z]]+@[\\d[a-z]]+.[a-z]+.[a-z]+|[\\d[a-z]]+@[\\d[a-z]]+.[a-z]+.[a-z]+.[a-z]+",
          mail));
        
        // 郵便番號チェック//String yubin = "123-123";
        String yubin = "123-1234";
        System.out.println(Pattern.matches("[\\d]{3}?-[\\d]{4}?", yubin));
      }
    }
    

    ● コンパイルと実行結果
    C:\java>javac RegexTest2.java
    
    C:\java>java RegexTest2
    true
    true
    true
    
    C:\java>
    

    コメント部分と既存の部分を入れ替えてコンパイルし、実行すると全て false になります。これは、正規表現で表されていないため、false となります。
    さらに、正規表現を使用して、文字列の置換作業が容易となりました。下記サンプルプログラムをご覧ください。

    ● ソースコード
    RegexTest3.java
    /* RegexTest3 */
    public class RegexTest3 {
      public static void main(String[] args) {
        
        String str = null;
        // & → &amp;
        str = "&";
        System.out.println("置換前の値 : " + str);
        str = str.replaceAll("&", "&amp;");
        System.out.println("置換後の値 : " + str);
        
        // < → &lt;
        str = "<";
        System.out.println("置換前の値 : " + str);
        str = str.replaceAll("<", "&lt;");
        System.out.println("置換後の値 : " + str);
        
        // > → &gt;
        str = ">";
        System.out.println("置換前の値 : " + str);
        str = str.replaceAll(">", "&gt;");
        System.out.println("置換後の値 : " + str);
        
      }
    }
    

    ● コンパイルと実行結果
    C:\java>javac RegexTest3.java
    
    C:\java>java RegexTest3
    置換前の値 : &
    置換後の値 : &amp;
    置換前の値 : <
    置換後の値 : &lt;
    置換前の値 : >
    置換後の値 : &gt;
    
    C:\java>
    

    posted on 2008-11-07 10:48 sanwish 閱讀(658) 評論(0)  編輯  收藏 所屬分類: web開發
    主站蜘蛛池模板: 亚洲AV日韩精品久久久久| 日韩在线免费看网站| 亚洲av无码专区国产乱码在线观看 | 欧美最猛性xxxxx免费| 亚洲国产精品白丝在线观看| 免费不卡在线观看AV| 精品久久久久久久免费加勒比| 国产中文在线亚洲精品官网| 日韩免费码中文在线观看| 中文字幕视频免费| 亚洲成AV人片久久| 成人最新午夜免费视频| 亚洲熟伦熟女专区hd高清| 久久精品电影免费动漫| 亚洲成AV人片一区二区| 欧洲美女大片免费播放器视频| 国产在线精品免费aaa片| 亚洲精品无码永久在线观看你懂的 | 日韩中文字幕免费| 日本特黄特色AAA大片免费| 亚洲国产精品日韩| 久久久久久亚洲精品影院| 国产精品免费_区二区三区观看| 91亚洲国产成人久久精品网站| 全部一级一级毛片免费看| 国产免费AV片在线播放唯爱网| 国产精品亚洲片在线观看不卡 | 久久亚洲中文字幕精品一区四| 亚洲中文字幕久久无码| 免费网站看v片在线香蕉| 日日狠狠久久偷偷色综合免费 | 深夜福利在线视频免费| 日韩一级免费视频| av午夜福利一片免费看久久| 亚洲AV无码不卡在线播放| 久久精品成人免费观看97| 亚洲视频在线观看免费视频| 日韩免费在线观看| 久久免费视频精品| 亚洲AV成人精品一区二区三区| 欧美好看的免费电影在线观看|