問(wèn)題提出:將格式為:"25/10/2009"的時(shí)間轉(zhuǎn)換為"2009-10-25"的格式
問(wèn)題分析:
1、年份2009、月份10、日25應(yīng)該做為一個(gè)獨(dú)立的單位,這樣我們可以直接知道什么地方匹配的是年、月還是日
2、可以用\d\d\d\d來(lái)匹配年份,用\d\d來(lái)匹配月份,用\d\d來(lái)匹配日
3、應(yīng)該可以有一個(gè)地方存儲(chǔ)匹配過(guò)的結(jié)果,以便于轉(zhuǎn)換
解決問(wèn)題所必須知道的:
1、分組就是將若干單位(可以是字符,正則表達(dá)式等等)組織在一起,成為一個(gè)獨(dú)立的單元,該單位可以跟獨(dú)立的字符一樣,受量詞的控制,分組使用()表示
2、分組分為捕獲性分組和非捕獲性分組,簡(jiǎn)單的說(shuō)捕獲性分組就是捕獲分組所匹配的內(nèi)容暫且存儲(chǔ)在某個(gè)地方,以便下次使用,捕獲性分組以(...)表示,有些地方將取得捕獲性分組所匹配結(jié)果的過(guò)程稱之為"反向引用",非捕獲性分組不捕獲分組所匹配的內(nèi)容,當(dāng)然也就得不到匹配的結(jié)果,非捕獲性分組以(?:...)表示,在一些只需要分組匹配但是并不需要得到各個(gè)分組匹配的結(jié)果時(shí),使用非捕獲性分組可以提高匹配速度。
3、在JavaScript和Java中,捕獲性分組所匹配的內(nèi)容都是以$1,$2,$3...的格式保存的!
解決問(wèn)題:
1、初步表達(dá)式:(\d\d)/(\d\d)/(\d\d\d\d),第一個(gè)分組(\d\d)表示日,第二個(gè)分組(\d\d)表示月,最后一個(gè)分組(\d\d\d\d)表示年
2、取得匹配后的結(jié)果:
在JavaScript中,分組匹配的結(jié)果是存儲(chǔ)在RegExp中的,可以通過(guò)RegExp.$1,RegExp.$2...來(lái)取得相應(yīng)的分組匹配結(jié)果
<script type="text/javascript">
<!--

window.onload = function()
{
var now = "25/10/2009";
/(\d\d)\/(\d\d)\/(\d\d\d\d)/.test(now);
alert(RegExp.$1); //25
alert(RegExp.$2); //10
alert(RegExp.$3); //2009
}
//-->
</script>
在Java中,可以通過(guò)Matcher的group(int)方法來(lái)取得:
String now = "25/10/2009";
Matcher matcher = Pattern.compile("(\\d\\d)/(\\d\\d)/(\\d\\d\\d\\d)").matcher(now);

if (matcher.find())
{
System.out.println(matcher.group(1));
System.out.println(matcher.group(2));
System.out.println(matcher.group(3));
}
注意:在String的replace()方法中,也可以直接以$1,$2...的格式來(lái)取得匹配結(jié)果
3、轉(zhuǎn)換:
JavaScript:
<script type="text/javascript">
<!--

window.onload = function()
{
var now = "25/10/2009";
/(\d\d)\/(\d\d)\/(\d\d\d\d)/.test(now);
alert(RegExp.$3+"-"+RegExp.$2+"-"+RegExp.$1); //2009-10-25
}
//-->
</script>
Java:
String now = "25/10/2009";
Matcher matcher = Pattern.compile("(\\d\\d)/(\\d\\d)/(\\d\\d\\d\\d)").matcher(now);

if (matcher.find())
{
System.out.println(matcher.group(3) + "-" + matcher.group(2) + "-" + matcher.group(1));
}
4、一個(gè)簡(jiǎn)單的寫法:
JavaScript:
<script type="text/javascript">
<!--

window.onload = function()
{
var now = "25/10/2009";
alert(now.replace(/(\d\d)\/(\d\d)\/(\d\d\d\d)/,"$3-$2-$1")); //2009-10-25
}
//-->
</script>
Java:
String now = "25/10/2009";
System.out.println(now.replaceAll("(\\d\\d)/(\\d\\d)/(\\d\\d\\d\\d)", "$3-$2-$1"));
5、分組結(jié)果量詞使用
上文提到,分組是可以結(jié)合量詞使用的,所以上面的程序也可以這樣來(lái)寫:
JavaScript;
<script type="text/javascript">
<!--

window.onload = function()
{
var now = "25/10/2009";

alert(now.replace(/(\d
{2})\/(\d
{2})\/(\d
{4})/,"$3-$2-$1")); //2009-10-25
}
//-->
</script>
Java:

String now = "25/10/2009";
System.out.println(now.replaceAll("(\\d{2})/(\\d{2})/(\\d{4})", "$3-$2-$1"));
拋磚引玉,希望對(duì)您有所幫助!
內(nèi)容原創(chuàng),轉(zhuǎn)載請(qǐng)注明出處!
posted on 2009-10-25 13:01
零全零美 閱讀(3981)
評(píng)論(2) 編輯 收藏 所屬分類:
正則表達(dá)式