방개
비밀번호를 잊어버리셨나요?

질문

RegExMatch 질문드립니다.

    • 글자 크기

Img\Flower\1.장미.bmp    ;파일 이름 : 1.장미.bmp

 

var := Img\Flower\1.장미.bmp

RegExMatch(var, "\(.*)\", FolderName)
RegExMatch(var, ".(.*).", PictureName)
RegExMatch(var, "\(.*).", Index)

MsgBox, % "FolderName : " FolderName1 "`nPictureName : " PictureName1 "`nIndex : " Index1

 

원하는 느낌은 Flower , 장미 , 1이 출력되고 싶은데 정규식 표현이 틀린 것 같아서 질문드립니다.

오토핫키에서 역슬래시 표기가 리스트뷰에서는 원화폐기호로 나오는데 둘을 구분해야 되는지도 궁금합니다.

    • 글자 크기
댓글 4
  • 2020.12.6 18:43 댓글

     \.*?+[{|()^$ 는 오토핫키 일반적인 문법에서의 이스케이프 시퀀스와 마찬가지로 특수한 기능을 하지 않도록 처리해줘야합니다. 

     

    그래서 \\로 써주시면 됩니다. (원화 기호와 역슬래시의 차이는 그냥 폰트문제라서 컴퓨터는 똑같이 해석하니 걱정 않으셔도 됩니다.)

     

    RegExMatch(var, "\\(.*?)\\", FolderName)

    처럼 써주시면 됩니다 (물음표 기호는 탐욕(greed) 성질을 없애주는 역할을 합니다 - 프날의 정규식 강좌에선 '가장 짧은 부분만 매칭'이라는 방식으로 설명드렸었습니다.)

     

    문자열 쩜(.)도 마찬가지로

     \.

    로 써줘야겠죠.

  • 프날님께
    차랑글쓴이
    2020.12.7 07:18 댓글

    감사합니다. 공부를 좀 더 했어야했는데.. 정규식 추가 강좌를 뒤늦게 확인했네요.

  • 2020.12.7 00:54 댓글
    roseImgPath := "Img\Flower\1.장미.bmp"
    
    roseImgProps := getImgProps(roseImgPath)
    
    MsgBox % ""
    . "folderName : " . roseImgProps.folderName . "`n"
    . "fileName : " . roseImgProps.fileName . "`n"
    . "index : " . roseImgProps.index
    
    getImgProps(imgPath)
    {
    	if !RegExMatch(imgPath, "^Img\\(?<folderName>.*?)\\(?<fileName>(?<index>\d+)[.].*)$", _)
    		return false
    	return {folderName: _folderName, fileName: _fileName, index: _index}
    }

     

  • helper님께
    차랑글쓴이
    2020.12.7 07:19 댓글

    감사합니다.! 많은 도움 됐습니다!

댓글 달기

서버에 요청 중입니다. 잠시만 기다려 주십시오...