陳鍾誠的程式作品集 -- Java 正規表達式
程式作品C 語言JavaC#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(); } } |
page revision: 0, last edited: 04 Nov 2010 03:51
Post preview:
Close preview