曾經使用過 lua 裡的regular expression,之後只要是處理到字串,就會想到它。
它的方便容我試給大家看。

itemLink = "|cff1eff00|Hitem:8176:0:0:0:0:0:0:1127223590|h[夜色頭帶]|h|r"
local _,_,itemname=string.find(itemLink,"%[([^]]+)%]")

就可以把 itemLink 裡的中括號裡的文字,放到 itemname 這個變數裡。
真是方便,對吧!


而在其他 language 裡,有一樣的用法嗎?
今天先試,在 java 該怎麼辦呢?

舉例來說:
"CASSETTE1STATE", DT_BYTE, SE_UINTEGER, 1,1
要找到 CASSETTE1STATE DT_BTYE SE_UNITEGER 1 1 這五個東西,該怎麼辦呢?
可以這樣做:

import java.util.regex.*;

oldstring = "\"CASSETTE1STATE\", DT_BYTE, SE_UINTEGER, 1,1";

Pattern TAP_TYPE_Pattern =
Pattern.compile("\"(C.*)\"\\s*,\\s*(\\w*)\\s*,\\s*(\\w*)\\s*,\\s*(\\w*)\\s*,\\s*(\\w*)\\s*");

Matcher matcher = TAP_TYPE_Pattern.matcher(oldstring);

String N = "";

while (matcher.find()){

varName = matcher.group();

Macros.message(view,varName);

for (int i = 1 ; i <= matcher.groupCount() ; i++){

N = N + i + " : " + matcher.group(i) + "\n";

}

}
System.out.println(N);


其中,matcher.group() 是整個選到的字。
而 matcher.group(i)就是在表示式裡用()框起來的值。

你看,類似的功能,java 要寫多大一包啊!
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 betaparticle 的頭像
    betaparticle

    betaparticle的部落格

    betaparticle 發表在 痞客邦 留言(0) 人氣()