정규식은 파싱과 함께 써야하는 꼭 필요한 함수입니다.

꼭 필요한거는 아니지만 필요에따라 95%는 함께 써야합니다.

정규식함수는 치환하거나 문자열내에 특정 문자열만 잘라주는 함수입니다.

종류도 다양합니다. RegExMatch,RegExReplace 등 많습니다. 그중에 RegExMatch를 알려드리고자 합니다.

RegExMatch함수는 앞서 말했듯이 정규식에 관련된 함수입니다.

RegExMatch 함수는 특정 문자열만 잘라서 다른 변수에 저장가능한 특징을 가지고 있습니다.

1
RegExMatch(잘라야하는 문자열이 포함된 변수,규칙,저장할 변수)
cs

RegExMatch함수에서 전달해야 하는것은 위와 같습니다. 

아래는 RegExMatch 함수의 사용 예제 입니다.

1
2
3
4
Var := "123456"
RegExMatch(Var,"123(.*?)56",output_var)
msgbox,%output_var1%
return
cs

제가 하고싶은건 Var라는 변수안에 4라는 문자만 따로 추출해서 저장하고싶은 상태입니다.

첫 번째 인자로 전달은 잘라야하는 문자 또는 문자열이 포함된 변수로 Var의 값을 전달했습니다.

두 번째 인자로는 앞에서 말했듯이,규칙입니다. 123(.*?)56은 123과 56사이에있는 문자또는 문자열을 추출해라 라는 말입니다.

(.*?)대신에 (.*)을 사용해도 상관없습니다 하지만 (.*)을 사용하면 규칙에 맞는 모든 문자또는 문자열을 추출하여 저장됩니다.

(.*?)는 처음 규칙에 맞는 문자또는 문자열을 추출합니다.

만약 Var라는 변수 "123456123456"이라고 하고 규칙에 123(.*?)56이라고 쓰면 4을 추출하고,123(.*)56이라고 쓰면 44을 추출합니다.

차이는 ? 특수기호의 유무 와 처음 규칙에 맞는 문자열만 할것이냐,규칙에 맞는 모든 문자열을 할것이냐의 차이입니다.

세 번째 인자로는 문자또는 문자열을 추출한것을 저장할 변수입니다. 만약 output_var이라고 썼으면 실제로 저장돼있는 변수는 뒤에 1이 붙습니다. 즉,output_var1 이라는 변수에 저장이 됐다라는 겁니다. 메세지박스로 띄워 확인했을때 아무것도 없는 공백이면 규칙에 성립하는 문자열이 없어 추출하지 못한 상태입니다.

정규식은 생각보다 쉽습니다.


문자열의 추출말고도 다른것도 가능합니다.

오토핫키 소스포지에 있는 예제입니다.

1
2
FoundPos := RegExMatch("xxxabc123xyz""abc.*xyz")  ; 4를 돌려줍니다, 부합이 발견된 위치입니다.
FoundPos := RegExMatch("abc123123""123$")  ; $가 끝에 부합하기를 요구하기 때문에 7을 돌려줍니다.
cs

1번째 줄은 abc.*xyz라는 규칙입니다. abc와 xyz사이에 뭐가들어가든 상관없고,이 조건이 일치하는 시작점의 위치주소를 반환합니다. xxxabc123xyz이라는 문자열에서 abc.*xyz이라는 규칙을 사용하면 시작점인 a의 위치주소를 반환하여 변수 FoundPos에 저장합니다.

2번째 줄은 $이라는 특수기호를 통해 끝에서부터 검사하는것 같습니다. 

RegExMatch 함수는 ErrorLevel도 있습니다.

0 : 에러가 없음

음의 정수 (0이하) : 정규식을 실행하는 동안 에러가 일어났다

RegExMatch함수는 규칙이 80%입니다. 자세한 규칙은 #2에서 설명해드리겠습니다.

댓글을 달아 주세요