2013年6月25日 星期二

正則表示(Regular expression;RegExp) \w 與[A-Za-z0-9] 的差異

有關正則表示法(或稱正規表示法),許多網路上的文章都提到
\w 表示任何一個字元與數字以及 '_' ,意同 [a-zA-Z0-9_]

實際使用時發現,如果是用 Unicode ,則 \w 表示「所有[a-zA-Z0-9_]及多位元(multi-bytes)字符」,例如中文字,所以在應用上
Regex.Split(Source, "(\\w+)");
Regex.IsMatch(Source, "\\w");
上面兩列的用法,會對空白以外的文字都視為符合,而不單指[A-Za-z0-9_],因此「我是叫John,今年13歲」,如果用 Regex.Split(Source, "(\\w+)"); 剖析只會得到「我是叫John,今年13歲」一組,如果要分析出英數字,必須改用 Regex.Split(Source, "([A-Za-z0-9])"); 這樣才會剖析成:

我是叫
John
,今年
13


以上現象是在 C# 上發現的,並未於 javascript 上重測!

沒有留言:

張貼留言