티스토리 뷰

======================================================

안녕하세요 Doridori 입니다.

드디어 코로나가 어느정도 마무리 되어 가는 듯한 분위기로 흘러가고 있고 이에 맞춰서 8개월 정도 진행 중인 제 출장도 어느 정도 마무리 되어 가는 듯한 느낌을 받고 있습니다. 

(2차 출장을 가야 할것 같기는 하지만 일단 한두달정도는 본사에서 출퇴근을 할 수 있을 듯 하네요.)

여느때와 다를것 없이 하고 싶은것도 많고 하고 있는것도 많아 강의를 빠르게 올리기가 쉽지는 않지만 항상 열심히 준비하고 있다는 점은 알아 주셨으면 합니다. 

요근래 제 유튜브에 여행 vlog 영상들이 올라와서 논다고 안하는거 아니냐 하고 하실 수도 있을것 같지만 제블로그에서 "여긴어디지?" 메뉴를 보시면 꾸준히 다니던 것이라는 걸 아실 수 있지 않을까 합니다. ^^a

각설하고 간만에 내용을 올렸으니 재미있게 봐주시면 좋을 듯 합니다. ^^

모두 화이팅 하십시오!!

======================================================

 

61. 정규식 (Regular Expression)

UI)

61. 정규식 (Regular Expression) (UI).zip
0.40MB

 

Soruce)

61. 정규식 (Regular Expression).zip
0.40MB

교재)

61. 정규식 (Regular Expression).pdf
0.21MB

 

 

 

이번에 정규식 관련된 내용을 준비 해보았는데 준비를 하다 보니 생각보다 봐야 할것도 많고 예제들을 만들어서 쉽게 사용 할 수 있도록 하려고 하였는데 준비를 하다보니 정규식들을 하나하나 검토도 해야 하고 이것들에 대해 예외 상황도 많이 생기고 해서 체크하는데 더 오래 걸린것 같습니다. 

정규식의 경우 패턴이기 때문에 만들어 놓으면 비슷한 패턴의 내용들은 응용해서 사용 하기도 쉽고 다른 언어들에 응용하기도 쉽기 때문에 자세히는 아니더라도 한번쯤 뒤져보고 다음에 필요 할 때 찾아 볼 수 있을정도는 내용을 익혀 놓으면 분명 많은 도움이 되지 않을까 합니다. 

UI)

가져다 사용 할 수 있는 예제를 만드는데 중점을 두고 만들다 보니 조금 복잡해 보이는 예제가 되었습니다. 

하지만 그렇게 복잡하지도 않고 Main Event는 2곳 밖에 없으니 찬찬히 뜯어 보시면 별거 없네 라고 생각 하실 수 있을 것같습니다. 

강의)

항상 똑같지만 강의를 만들때에는 시험보는 느낌으로 시작하는 듯 합니다. 

편집도 안하기 때문에 아이들이 떠들지 않는 조용한 시간대를 찾아서 하려고 하다보니 예민해지는것 같기도 하고 . . . 

항상 최선을 다해서 준비하니 재미있게 봐주시면 감사드리겠습니다. ^^

Source)

정규식 부분만 집중해서 보시면 나머지는 그렇게 복잡하지 않습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace regex
{
    public partial class Form1 : Form
    {
        DataTable _dt;
 
 
        public Form1()
        {
            InitializeComponent();
        }
        
 
        private void Form1_Load(object sender, EventArgs e)
        {
            RegTableSetting();  // 화면 초기화 진행 시 DataTable에 정규식 값을 세팅해 줌 (DB와 연동하면 사용자가 등록해서 사용해도 될듯)
        }
 
 
        /// <summary>
        /// Check Button을 Click 했을 때 선택 된 Radio Button에 따른 정규식 비교
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnDataCheck_Click(object sender, EventArgs e)
        {
            Regex regex = new Regex(lblData.Text);
 
            if (rdoMatch.Checked)
            {
                Match mData = regex.Match(tboxCheckData.Text);
 
                if(mData.Success)
                {
                    int iPosition = mData.Index;
                    string sValue = mData.Value.ToString();
                    lblResult.Text = "OK";
                    lblErrorMessage.Text = $"[{iPosition}]위치에서 [{sValue}]값을 찾았습니다.";
                }
                else
                {
                    lblResult.Text = "NG";
                    lblErrorMessage.Text = "정규식과 일치하는 Data가 없습니다.";
                }
            }
            else if (rdoIsMatch.Checked)
            {
                // 정규식에 지정된 문자가 있는지 확인
                if (regex.IsMatch(tboxCheckData.Text))
                {
                    lblResult.Text = "OK";
                    lblErrorMessage.Text = "사용 가능 합니다.";
                }
                else
                {
                    lblResult.Text = "NG";
                    lblErrorMessage.Text = $"[{tboxCheckData.Text}]는 사용 할 수 없는 형식 입니다. ▶ 사용 가능 예제 : {lblSample.Text}";
                }
            }
            else if (rdoSplit.Checked)
            {
                string[] sData = regex.Split(tboxCheckData.Text);
                string sResult = string.Join(" ", sData);
 
                if (sResult != "")
                {
                    lblResult.Text = "OK";
                    lblErrorMessage.Text = $"결과 : {sResult}";
                }
                else
                {
                    lblResult.Text = "NG";
                    lblErrorMessage.Text = "정규식과 일치하는 Data가 없습니다.";
                }
            }
            else if (rdoReplace.Checked)
            {
                string sData = regex.Replace(tboxCheckData.Text, tboxReplace.Text);
                
                if (sData != "")
                {
                    lblResult.Text = "OK";
                    lblErrorMessage.Text = $"결과 : {sData}";
                }
                else
                {
                    lblResult.Text = "NG";
                    lblErrorMessage.Text = "정규식과 일치하는 Data가 없습니다.";
                }
 
            }
        }
 
 
        /// <summary>
        /// 참고용 Data Table 생성
        /// </summary>
        private void RegTableSetting()
        {
            _dt = new DataTable("regexTable");
 
            //DataColumn 생성
            DataColumn colregName = new DataColumn("Name"typeof(string));
            DataColumn colregData = new DataColumn("Data"typeof(string));
            DataColumn colregSample = new DataColumn("Sample"typeof(string));
 
            //생성된 Column을 DataTable에 Add
            _dt.Columns.Add(colregName);
            _dt.Columns.Add(colregData);
            _dt.Columns.Add(colregSample);
 
            // 생성된 Table에 Row 작성
            _dt.Rows.Add(regexDataRow(_dt.NewRow(), "ETC_문자열체크", @"List<\w+>", @"List<변수> 가 있는지를 비교"));
            _dt.Rows.Add(regexDataRow(_dt.NewRow(), "ETC_지정문자", @"(D|d)ori", @"Dori, dori를 찾음"));
            _dt.Rows.Add(regexDataRow(_dt.NewRow(), "ETC_문자만", @"\D+""12 54 78 5 9"));
            _dt.Rows.Add(regexDataRow(_dt.NewRow(), "IsMatch_전화번호", @"^01[01678]-[0-9]{4}-[0-9]{4}$""000-0000-0000"));
            _dt.Rows.Add(regexDataRow(_dt.NewRow(), "IsMatch_이름(한글3자리)", @"^[가-힣]{3}$""홍길동"));
            _dt.Rows.Add(regexDataRow(_dt.NewRow(), "IsMatch_숫자만", @"^[0-9]""1234567890"));
            _dt.Rows.Add(regexDataRow(_dt.NewRow(), "IsMatch_영어만", @"^[a-zA-Z]""abcdEFGH"));
            _dt.Rows.Add(regexDataRow(_dt.NewRow(), "IsMatch_URL주소", @"(http|https)://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?""https://cwkcw.tistory.com/"));
            _dt.Rows.Add(regexDataRow(_dt.NewRow(), "IsMatch_주민등록번호", @"[0-9][0-9][01][0-9][0123][0-9]-[1234][0-9]{6}""000000-1000000"));
            _dt.Rows.Add(regexDataRow(_dt.NewRow(), "IsMatch_특수문자제외", @"^[a-zA-Z0-9ㄱ-힣]*$""abcd가나다라1234"));
            
            dgRegex.DataSource = _dt;
            dgRegex.AutoResizeColumns();
 
        }
 
 
        /// <summary>
        /// Data Row 생성
        /// </summary>
        /// <param name="dr"></param>
        /// <param name="sName"></param>
        /// <param name="sData"></param>
        /// <param name="sSample"></param>
        /// <returns></returns>
        private DataRow regexDataRow(DataRow dr, string sName, string sData, string sSample)
        {
            cboxRegexName.Items.Add(sName); // ComboBox Setting
 
            dr["Name"= sName;
            dr["Data"= sData;
            dr["Sample"= sSample;
 
            return dr;
        }
 
 
        /// <summary>
        /// cbox 값이 변경 될 경우 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void cboxRegexName_SelectedIndexChanged(object sender, EventArgs e)
        {
            DataRow[] dRow = _dt.Select($"Name = '{cboxRegexName.SelectedItem}'");
 
            lblData.Text = dRow[0]["Data"].ToString();
            lblSample.Text = dRow[0]["Sample"].ToString();
        }
 
    }
}
 
cs
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함