8장, 문자열의 응용 (8-2)
* 정규 표현
: 검색하려는 문자열을 추상적으로 표현하는 것.
: 서로 다른 문자열을 한 가지 형식으로 표현할 수 있다.
이렇게 사용된 문자열을 패턴이라고 부른다.
정규표현에서 문자를 그대로 쓰면 문자 자체를 표시하지만 메타 문자를 사용할 수도 있다.
메타 문자
: 특수한 의미를 가진 문자
메타문자 | 의미 |
. | 임의의 한 문자(줄바꿈 제외) |
* | 0회 이상의 반복 |
+ | 1회 이상의 반복 |
? | 0회 또는 1회의 반복 |
^ | 맨 앞 |
$ | 맨 끝 |
| | 선택 |
() | 정규 표현의 그룹 |
[] | 문자 클래스 |
{n} | n회의 반복 |
{n,} | n회 이상의 반복 |
{n,m} | n회 이상, m회 이하의 반복 |
\ | 메타 문자를 문자로 취급 |
ex)
N.T = N T → NOT이 될 수도, NET이 될 수도 있다.
MO* → M 혹은, MO 혹은, MOO // O가 한 개 이상 있거나 또는 없음.
MO+ → MO 혹은, MOO // O가 한 개 이상 있음.
* 사용법
System.Text.RegularExpressions 라는 네임스페이스 안의 Regex라는 클래스를 사용한다.
1. Regex 클래스에서 패턴의 객체를 작성한다.
Regex r = new Regex("C.*의 그림책"); |
C.*의 그림책 : 패턴
2. Match() 메소드로 검색한다. 결과는 Match 클래스의 객체가 된다.
Match m = r.Match("이것은 C#의 그림책입니다."); |
Match : 클래스.
이것은 C#의 그림책입니다. : 대상 문자열. 이 문자열 안에서 'C#의' 문자열이 몇 번째 인덱스부터 시작하는지 조사한다.
Match 클래스의 속성 | 의미 |
Index | 검색 결과의 인덱스 |
Value | 검색 결과의 문자열 |
Length | 검색 결과의 문자열 길이 |
* Regex.Replace()
: 패턴이 일치하고 있는 부분의 문자열을 지정한 문자열로 치환하는 메소드
Regex r = new Regex("C.*의 그림책"); string a = r.Replace("이것은 C++의 그림책입니다.", "C#의 그림책"); |
* 다른 형에서 문자열로 변환
int a = 10; string b = a.ToString(); |
a.ToString() : a값을 string 형으로 변환하다.
* 문자열의 형을 다른 형으로 변환
string a = "10"; int b = int.Parse(a); int c = b + 5; // c = 15 |
int.Parse(a) : a의 값을 int형으로 변환하며 대입한다.
* 예제 프로그램
: 텍스트 파일에서 읽어들인 문자열을 셔플한 문자열에서 원래 문자열을 맞히는 퀴즈. 2회 틀리면 힌트를 표시한다.
진행에 앞서 필요한 text파일을 폴더에 넣어준다.
* 가바지 컬렉션(garbage collection)
: 사용하지 않게 된 객체를 자동으로 폐기해주는 C#언어의 편리한 기능. 전혀 참조하지 않게 된 객체는 불필요한 쓰레기로 간주하고 회수한다. C언어와 C++ 언어에는 사용하지 않는다.
언제 실행되는지는 정확히 파악할 수 없지만 System 네임스페이스의 GC클래스의 Collect 메소드를 호출하면 강제로 실행할 수 있다.