정규 표현식에 사용되는 연산자
메타(Meta) 문자
. : 어떤 글자든지 한 글자와 매칭
^ : 문자열의 시작 부분을 나타냄
$ : 문자열의 끝 부분을 나타냄
반복 연산자
* : 바로 앞 패턴이 0번 이상 반복 됨
+ : 바로 앞 패턴이 1번 이상 반복 됨
? : 바로 앞 패턴이 나타지 않거나 1번 나타날 수 있음
{m} : 바로 앞 패턴이 m번 반복됨
{m,} : 바로 앞 패턴이 m번 이상 반복됨
{m,n} : 바로 앞 패턴이 m번 이상 n번 이하 반복됨
그룹
() : 패턴의 한 부분을 그룹화, 패턴에 매칭되는 부분을 기억함
열거 및 선택
[] : []안에 열거된 글자 중 하나와 같으면 매칭 된 것으로 봄
[^] : [^와] 사이에 열거된 글자가 아닌 다른 글자이면 매칭 된 것으로 봄
| : | 기호 왼쪽, 오른쪽에 명시된 패턴 중 하나에 매칭되면 매칭 된 것으로 봄
복귀
\ : 연산자로 사용되는 문자를 패턴에 사용하기 위해 바로 앞에 붙임
- regexp 명령어
정규 표현식에 주어진 문자열이 매칭될 때 1을 리턴하고, 매칭되지 않으면 0을 리턴한다.
원하는 문자열을 지정한 변수에 저장할 수 있는 방법을 제공한다.
-nocase : 정규 표현식에 나타난 소문자들은 문자열의 같은 문자이기만 하면 소문자와도 대문자와도 매칭됨
-indices : 문자열 안에서 매칭된 패턴의 시작 index와 끝 index의 쌍을 주어진 변수에 기억 시킴
문자열 index는 0부터 시작
-expaned : 패턴을 여러 줄에 걸쳐서 기술할 수 있도록 해줌. 각 패턴에 대하여 주석을 달 수 있게 해줌
-- : 정규표현식이 -로 시작할 경우 플래그로 오해할 수 있는 소지를 없애는 것
set test_string host:address:phone:name
regexp {([a-z]+):([a-z]+):([a-z]+):{[a-z]+)} $test_string all p1 p2 p3
1 << 매칭 됬음
set all
host:address:phone
set p1
host
set p2
address
set p3
phone
regexp -indices {([a-z]+):([a-z]+):([a-z]+)} $test_string all p1 p2 p3
0 17
0 3
5 11
13 16
set test_string HosT:AddresS:Phone:nameE
regexp -nocase {([a-z]+):([a-z]+):([a-z]+)} $test_string all p1 p2 p3
HosT:AddresS:Phone
- regsub 명령어
정규 표현식을 치환 연산(substitution)을 수행하도록 하는 명령어
-nocase : 정규 표현식의 소문자는 같은 문자라면 문자열의 대문자, 소문자 모두와 매칭
-all : 매칭이 여러 번 일어나면 모두 치환해라
-- : 정규표현식이 -로 시작할 경우 플래그로 오해할 수 있는 소지를 없애는 것
set test_string everyting
regsub -all {e} $test_string {E} sub_string
puts $sub_string
>> EvErything
연습문제
입력데이타 : DAT_LOT3 / 출력데이타 : LOT-3DAT
입력데이터를 받아 다음과 같은 출력데이터로 변환해보시오
set test DAT_LOT3
regsub {(...)_(...)(.)} $test {\2-\3\1} trans
//{([a-z]+)_([a-z]+)([0-9])
put [set trans]
'Linux > tcl' 카테고리의 다른 글
[tcl] (0) | 2022.08.02 |
---|---|
[Tcl] tcl 리스트 / 배열 (0) | 2022.05.25 |
[Tcl] tcl 문자열 조작 (0) | 2022.05.18 |
[Tcl] tcl 제어구조 (0) | 2022.05.17 |
[Tcl] tcl 기본문법 (0) | 2022.05.17 |