2016. 2. 22.

[펌] 문자열 정규식과 쌍따옴표의 이해

1) RegExReplace

string = <sdw999!@SS**ghrefad/>>?+%##..남기는,/^<adfa><adfwa>문자열/adf>

msgbox,% RegExReplace(string, "<[^>]*>")

위의 예문은,
<로 시작해서 >로 끝나는 문자열을 string 변수에 담은 후
특수문자들을 제거한 정규식입니다.



2) RegExMatch

(http://autohotkey.co.kr/b/5-39553 오핫사 도움받기전문 님의 질문과 답변글을 펌하였습니다.)

파싱을 해온 웹의 html 문자열중 class를 표시하는 문구가 <td class="td"> 라고 되있습니다.
 
원하는 문자열을 구하기 위해
 
regexmatch(p,"<td class="td">(."?)</td>",var)
msgbox,%var1%
 
이렇게 하니 역시나 예상대로 따옴표가 들어가니 오류를 뿜더군요.
저 따옴표를 어떻게 처리해야 단순한 텍스트로 읽어들이나요?

----------------------------------------------------------------------
위의 질문이 최초 질문이었는데 홀로 해결하였습니다.
d=
(
"
)
s=
(
;
)
a=
(
amp
)
StringReplace,test,test,%d%,, All
StringReplace,test,test,%s%,, All
StringReplace,test,test,%a%,, All
 
이런식으로 모두 없에버렸습니다. 하핫...
해결 하니 새로운 궁금증이 생기는군요 ㅠㅠ
 
html 소스를 우선 저렇게 하여 제가 원하는 텍스트를 불러오기는 성공 하였으나.
그뒤에 제가 원하는 스크립트가 더 있음에도 불과하고 맨 위에 있는 최초의 텍스트만 계속해서 출력해냅니다.
 
RegExMatch(test,"<td class=fd>(.*?)</td>",var)
<td class=fd>이 구문과  </td>이 구문 사이에 있는 텍스트가 10가지가 넘는데 제일 상위에 있는 텍스트밖에는 가져오질 못하는군요.
모두 불러오고 싶은데 어떻게 해야할까요?

* 답변 :

대상물 =
(
<span class="btn_arw top"><a href="#" > <span class=" ~
)
정규식 := "span (.*)a href"
첫만남 := RegExMatch( 대상물, 정규식, 쪽집게)
MsgBox,
(
 `n`n %대상물%
 `n`n %정규식%
 `n`n %쪽집게%
 `n`n %쪽집게1%
 `n`n %첫만남%
 `n`n %ErrorLevel%
)
Return

하나씩 차분하게 짚으면서 진행하면 별로 어렵지 않습니다.
상당히 귀찮기는 합니다.




[쌍따옴표 탈출식의 이해와 예제]

(https://autohotkey.com/board/topic/114246-escaping-quotes/?hl=%252Bdouble+%252Bquotation 질문과 답변글을 펌하였습니다.)

문자열 혹은 변수에서 쌍따옴표(")가 문제가 될 때가 있는데
그때에는 쌍따옴표를 두번 연이어 써주면 해결되는 경우가 있다.
아래와 같은 경우이다.


제가 구현하고자 하는 기능은 간단합니다. 아래와 같이 표현시키고싶은데요.
"VAR1,VAR2"

이렇게 반복되는 식인데,..

VAR3 := % ""VAR1 "," VAR2""
이렇게 접근해서 소스를 짰더니 var2 에서 illegal character 오류가 났다고 뜨는겁니다.
어떻게 해결할까요???






첫번째 분 답변 :
text := """QuotedString""" ;text now contains "QuotedString"

 if ("""QuotedString""" = text) msgbox % "It works`n" text

예)

var1 := "aaa" var2 := "bbb" var3 := """" var1 "," var2 """" msgbox % var3



두번째 분 답변 :

VAR1=abc
VAR2=123
VAR3 = "%VAR1%","%VAR2%"
MsgBox, %VAR3%