中央氣象局 RSS 解析正規式 Regex

<%@page contentType="text/html; charset=utf-8" errorPage=""%>&#x10;<%@page import="java.util.regex.Pattern"%>&#x10;<%@page import="java.util.regex.Matcher"%>&#x10;<%&#x10;out.clear();&#x10;%><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">&#x10;<html xmlns="http://www.w3.org/1999/xhtml">&#x10;<head>&#x10;<title>Parse Central Weather Demo</title>&#x10;<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />&#x10;</head>&#x10;<body>&#x10;<%&#x10;String str="";&#x10;String pattern="^([\\D]+)\\d{2}/\\d{2}\\s([\\D]+)\\s([\\D]+)\\s[\\D]+:\\s(\\d{1,3}\\s~\\s\\d{1,3})\\s[\\D]+:\\s(\\d{1,3})%\\((\\d{2}/\\d{2})\\s(\\d{2}:\\d{2})[\\D]+\\)$";&#x10;Pattern p=null;&#x10;Matcher m=null;&#x10;%>&#x10; 台北市05/01 今晚至明晨 晴時多雲 溫度: 22 ~ 24 降雨機率: 0%(05/01 16:30發布)<br />&#x10;<%&#x10;str=" 台北市05/01 今晚至明晨 晴時多雲 溫度: 22 ~ 24 降雨機率: 0%(05/01 16:30發布)";&#x10;pattern="^[\\D]+\\d{2}/\\d{2}\\s([\\D]+)\\s([\\D]+)\\s[\\D]+:\\s*(\\d{1,3}\\s~\\s\\d{1,3})\\s[\\D]+:\\s*(\\d{1,3})%\\((\\d{2}/\\d{2})\\s(\\d{2}:\\d{2})[\\D]+\\)$";&#x10;p = Pattern.compile(pattern);&#x10;m = p.matcher(str.trim());&#x10;if(m.find()){&#x10;	for (int i = 1; i <= m.groupCount(); i++) {&#x10;      out.println("group(" + i + "):" + m.group(i)+"<br />");&#x10;    }&#x10;    m.reset();&#x10;}&#x10;%><hr />明日白天 晴時多雲 溫度: 24 ~ 28 降雨機率: 0% <br />&#x10;<%&#x10;str="明日白天 晴時多雲 溫度: 24 ~ 28 降雨機率: 0% ";&#x10;pattern="^([\\D]+)\\s([\\D]+)\\s[\\D]+:\\s*(\\d{1,3}\\s~\\s\\d{1,3})\\s[\\D]+:\\s*(\\d{1,3})%$";&#x10;p = Pattern.compile(pattern);&#x10;m = p.matcher(str.trim());&#x10;if(m.find()){&#x10;	for (int i = 1; i <= m.groupCount(); i++) {&#x10;      out.println("group(" + i + "):" + m.group(i)+"<br />");&#x10;    }&#x10;    m.reset();&#x10;}&#x10;%><hr />05/02 溫度:22 ~ 28 晴時多雲&#x10;<%&#x10;str="05/02 溫度:22 ~ 28 晴時多雲";&#x10;pattern="^(\\d{2}/\\d{2})\\s[\\D]+:\\s*(\\d{1,3}\\s~\\s\\d{1,3})\\s([\\D]+)$";&#x10;p = Pattern.compile(pattern);&#x10;m = p.matcher(str.trim());&#x10;if(m.find()){&#x10;	for (int i = 1; i <= m.groupCount(); i++) {&#x10;      out.println("group(" + i + "):" + m.group(i)+"<br />");&#x10;    }&#x10;    m.reset();&#x10;}&#x10;%>&#x10;</body>&#x10;</html>

&#x10;

 

&#x10;

執行結結果:

&#x10;

台北市05/01 今晚至明晨 晴時多雲 溫度: 22 ~ 24 降雨機率: 0%(05/01 16:30發布)
&#x10;group(1):今晚至明晨
&#x10;group(2):晴時多雲
&#x10;group(3):22 ~ 24
&#x10;group(4):0
&#x10;group(5):05/01
&#x10;group(6):16:30

&#x10;


&#x10;

明日白天 晴時多雲 溫度: 24 ~ 28 降雨機率: 0%
&#x10;group(1):明日白天
&#x10;group(2):晴時多雲
&#x10;group(3):24 ~ 28
&#x10;group(4):0

&#x10;


&#x10;

05/02 溫度:22 ~ 28 晴時多雲&#x10;group(1):05/02
&#x10;group(2):22 ~ 28
&#x10;group(3):晴時多雲

&#x10;

 

&#x10;

 

&#x10;

 

&#x10;

備註:中央氣象局的RSS2.0並不是完全符合W3C的標準,且資料呈現不夠有條理,不易被解析

標籤: , , ,

發表留言