陳鍾誠的程式作品集 -- Java 正規表達式

程式作品

C 語言

Java

C#

JavaScript

常用函數

文字處理

遊戲程式

衛星定位

系統程式

資料結構

網路程式

自然語言

人工智慧

機率統計

資訊安全

等待完成

訊息

相關網站

參考文獻

最新修改

簡體版

English

package ccc;
import java.util.*;
import java.util.regex.*;
 
public class REGEX {
  public static void main(String[] args) throws Exception {
    String xml = "<person name=\"ccc\">ccc@mail.km.kuas.edu.tw<tel>082313530</tel><tel>0938707315</tel></person>";
    System.out.println("split(xml, <>=)="+Arrays.asList(xml.split("[<>=]")));
    System.out.println("plaintext = "+xml2plaintext(xml));
    System.out.println("match = "+matchAt(xml, 0, "\\w+"));
    System.out.println("match = "+matchAt(xml, 0, "<\\w+"));
    System.out.println("matches = "+UTIL.array2text(matches(xml, "<tel>(\\w+)</tel>"), ","));
    System.out.println("transform(xml, <(.*?)>, <(?1)>) = "+transform(xml, "<(.*?)>", "[(?1)]"));
    System.out.println("group = "+UTIL.array2text(groups("3a+2b+1c=5f", "([\\w+\\+]+)=([\\w+\\+]+)"), ","));
  }
 
  public static String transform(String pText, String fromPat, String toPat) {
      StringBuffer rzText = new StringBuffer();
    Pattern p = Pattern.compile(fromPat);
    Matcher m = p.matcher(pText);
    int lastIdx = 0;
    while (m.find()) {
        rzText.append(pText.substring(lastIdx, m.start()));
        String pat = toPat;
        for (int gi=1; gi<=m.groupCount(); gi++)
            pat = STR.replace(pat, "(?"+gi+")", m.group(gi));
        rzText.append(pat);
        lastIdx = m.end();
    }
    rzText.append(pText.substring(lastIdx));
    return rzText.toString();
  }
 
  public static String matchAt(String pText, int pFrom, String pPattern) {
    Pattern p = Pattern.compile(pPattern, Pattern.CASE_INSENSITIVE|Pattern.DOTALL);
    Matcher m = p.matcher(pText.substring(pFrom));
    if (m.lookingAt()) return m.group(0);
    return null;
  }
 
  public static String[] matches(String pText, String pPattern) {
      return matches(pText, pPattern, 99999);
  }
 
  public static String[] matches(String pText, String pPattern, int pMax) {
      Vector rzMatches = new Vector();
    Pattern p = Pattern.compile(pPattern, Pattern.CASE_INSENSITIVE|Pattern.DOTALL);
    Matcher m = p.matcher(pText);
    for (int i=0; i<pMax&&m.find();i++)
        rzMatches.add(m.group(1));
    String[] rzStrs = new String[rzMatches.size()];
    for (int i=0; i<rzStrs.length; i++)
        rzStrs[i] = (String) rzMatches.get(i);
    return rzStrs;
  }
 
  public static String[] groups(String pText, String pPattern) {
    Pattern p = Pattern.compile(pPattern, Pattern.CASE_INSENSITIVE|Pattern.DOTALL);
    Matcher m = p.matcher(pText);
    if (!m.matches()) return null;
      String[] rzGroups = new String[m.groupCount()];
    for (int i=0; i<m.groupCount();i++)
        rzGroups[i]=m.group(i+1);
    return rzGroups;
  }
 
  public static String matchFirst(String pText, String pPattern) {
      String[] rzMatches = matches(pText, pPattern, 1);
      if (rzMatches.length == 1) return rzMatches[0];
      return null;
  }
 
  public static String xml2plaintext(String pXml) {
      StringBuffer plainText = new StringBuffer();
    String[] nodes = matches(pXml, ">(.*?)<");
    for (int i=0; i<nodes.length; i++)
        plainText.append(nodes[i]+" ");
    return plainText.toString();
  }  
}

Facebook

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License