2009年11月5日 星期四

正規表式示-regex-基礎

字元:
    \t Tab
    \n 換行
    \r 歸位
    \f 換頁
    \e 跳脫字元

字元類型:
    . 任意字元
    [abc] a, b, c中的任意字元 ( 同於 a | b | c)
    [^abc] 除了a, b, c中的任意字元
    [a-zA-Z] a-z或A-Z的任意字元
    [abc[def]] 聯集?
    [a-z&&[def]] 交集?
    \s 空白型的字元 (空白, 跳格, 換行, 換頁, 歸位)
    \S 非空白型的字元
    \d 指阿拉伯數字 0到9
    \D 非阿拉伯數字
    \w 字詞字元 [a-zA-Z_0-0]
    \W 非字詞字元

邏輯運算子 :
   
   
邊界比對:
    ^ 檔案起始處
    $ 檔案結尾處
    \b 字詞的邊界
    \B 非字詞邊界
    \G 前一相符處之未
   
數量飾詞:
    ? 表示一個或無
    * 零次或多次
    + 一次或多次
    {n} 符合n次
    {n,} 至少n次
    {n,m} 至少n次但不多於m次
   
群組:
    群組0代表整個表示式
    群組1表示第一個被括起來的群組
    ...   
       

樣式標記:
    有用到再貼唄






Matcher物件
    matches() 只會比對字串一開始的部份, 並全部符合regex才會成功
    lookingAt() 只會比對字串一開始的部份, 只要輸入字串開始部份符合就成功
    find() 能找出輸入字串中所有此regex存在的地方
    find(int start)
    groupCount() 回傳 群組0以外的群組數目
    group() 回傳前一次比對動作
    start() 回傳前一次比對動作中, 找到群組的開始索引值
    end() 回傳前一次比對動作中, 找到群組的最後一個字元索引值加一



方便傳入字串與regex, 測試用

下面code的作者 http://www.mindviewinc.com/TIJ4/CodeInstructions.html


//: strings/TestRegularExpression.java
// Allows you to easily try out regular expressions.
// {Args: abcabcabcdefabc "abc+" "(abc)+" "(abc){2,}" } 
import java.util.regex.*;

public class TestRegularExpression {
public static void main(String[] args) {
if (args.length < 2) {
System.out.println("Usage:\njava TestRegularExpression " +
"characterSequence regularExpression+");
System.exit(0);
}
System.out.println("Input: \"" + args[0] + "\""); 

for (String arg : args) {
System.out.println("Regular expression: \"" + arg + "\"");
Pattern p = Pattern.compile(arg);
Matcher m = p.matcher(args[0]);
while (m.find()) {
System.out.println("Match \"" + m.group() + "\" at positions " + 
m.start() + "-" + (m.end() - 1));
}
}
}
}


/* Output:
Input: "abcabcabcdefabc"
Regular expression: "abcabcabcdefabc"
Match "abcabcabcdefabc" at positions 0-14
Regular expression: "abc+"
Match "abc" at positions 0-2
Match "abc" at positions 3-5
Match "abc" at positions 6-8
Match "abc" at positions 12-14
Regular expression: "(abc)+"
Match "abcabcabc" at positions 0-8
Match "abc" at positions 12-14
Regular expression: "(abc){2,}"
Match "abcabcabc" at positions 0-8
*///:~

0 意見: