首先本篇將會介紹 簡易的正規化如何使用
語法如下
Regex 物件名 = new Regex("pattern")
在pattern放入符號表達式
下面圖表來源為菲力貓的程式設計
符號
|
表示式
|
說明或範例
|
不成立字串
|
.
|
a.
|
表示任何字元。
含字母 "a" 以及其後任一個字元的字串。
Ex: "ab", "bac"
|
"a", "ba"
|
重覆字串
| |||
*
|
ab*
|
表示沒有或更多字元。
"ab*":表示一個字串有一個a後面跟著零個或若干個b。
Ex: "a", "ab", "abbb"
| |
+
|
ab+
|
一次或更多字元。
"ab+":表示一個字串有一個a後面跟著至少一個b或者更多
Ex: “ab”,”abbbb”
| |
?
|
ab?
|
沒有或一次字元。
ab?":表示一個字串有一個a後面跟著零個或者一個b
Ex: “a”,”ab”
| |
[]
|
[13579]
|
方括號表示某些字元允許在一個字串中的某一特定位置出現。
包含 "1" 或 "3" 或 "5" 或 "7" 或 "9" 的字串。
Ex: "a3b", "1xy"
|
"y2k"
|
[0-9]
|
含數字之字串
|
不含數字之字串
| |
[a-z0-9]
|
含數字或小寫字母之字串
|
不含數字及小寫字母之字串
| |
[a-zA-Z0-9]
|
含數字或字母之字串
|
不含數字及字母之字串
| |
b[aeiou]t
|
"bat", "bet", "bit", "bot", "but"
|
"bxt", "bzt"
| |
^[a-zA-Z]
|
表示一個以字母開頭的字串
| ||
[0-9]%
|
表示一個百分號前有一位元的數位
| ||
[a-zA-Z0-9]$
|
表示一個字串以一個逗號後面跟著一個字母或數位結束
| ||
{}
|
ab{2}
|
用以表示重復次數的範圍。
表示一個字串有一個a跟著2個b。
Ex: "abb"
| |
ab{2,}
|
表示一個字串有一個a跟著至少2個b
| ||
ab{3,5}
|
表示一個字串有一個a跟著3到5個b
| ||
字串位置
| |||
^
|
^xy
|
以 "xy" 開始的字串
Ex: "xyz", "xyab"
|
"axy", "bxy"
|
$
|
xy$
|
以 "xy" 結尾的字串
Ex: 例如:"axy", "abxy"
|
"xya", "xyb"
|
[^]
|
[^0-9]
|
不希望出現的字元,'^'應在方括號裏的第一位。
不含數字之字串
|
含數字之字串
|
%[^a-zA-Z]%
|
兩個百分號中不應該出現字母
| ||
[^aeiouAEIOU]
|
不含母音之字串
|
含母音之字串
| |
[^\^]
|
不含 "^" 之字串,例如:"xyz", "abc"
|
"xy^", "a^bc"
| |
特殊字元
| |||
\d
|
數字0~9
| ||
\D
|
非數字
| ||
\w
|
數字、字母、底線
| ||
\W
|
非 \w
| ||
\s
|
空白字元 + \r\t\n\f
| ||
\S
|
非 \s
| ||
|
|
(b¦cd)ef
|
表示”或”
"bef"或"cdef"
| |
\
|
^\^
|
跳脫字元,將特殊符號的義意去除,^.$()¦*+?{\"這些字元前加上跳脫字元'\'
字首必須是^
| |
程式碼如下!!
private void btn_GetCount_Click(object sender, EventArgs e)
{
int P_scalar = 0;//定義值類型變數並賦值為0
Regex P_regex = //建立正則表達式對象,用於判斷字符是否為中文字
new Regex("^[\u4E00-\u9FA5]{0,}$");
for (int i = 0; i < txt_str.Text.Length; i++)//深度搜尋字串中每一個字符
{
P_scalar = //如果檢查的字符是中文字則計數器加1沒有則不動作
P_regex.IsMatch(txt_str.Text[i].
ToString()) ? ++P_scalar : P_scalar;
}
txt_count.Text = P_scalar.ToString();//顯示中文字數量
}
那如果要查詢英文字母呢?? 一樣
跟上面差不多 唯一修改的地方是
private void button2_Click(object sender, EventArgs e)
{
int COUNT = 0;
Regex tr = new Regex("^[A-Za-z]");
for (int w = 0; w < txt_str.Text.Length; w++)
{
COUNT = tr.IsMatch(txt_str.Text[w].ToString()) ? ++COUNT : COUNT;
}
label3.Text = COUNT.ToString();
}
顯示數字可以用正規化
不過下面不用正規劃
改用一下 char.IsDigit如果是數字會回傳一個BOOL
private void button1_Click(object sender, EventArgs e)
{
int r = 0;//計數器
char[] MyisDigit = txt_str.Text.ToCharArray();//字轉轉字元陣列
foreach (char E in MyisDigit)//一個一個搜尋
{
while (char.IsDigit(E))//如果是數字則回傳true
{
r = r + 1;
break;//跳出while迴圈 不然會永無止境的循環
}
}
//將累加結果SHOW出
MessageBox.Show("字串中有" + r.ToString() + "個數字");
}
沒有留言:
張貼留言