정규식 연구 - 2
잠 안 오니 계속 연구
찾아보니 역시 누가 상세히 설명해둔 게 있다
일단 읽어보자
https://arca.live/b/simya/80537761?target=all&keyword=%EC%A0%95%EA%B7%9C%EC%8B%9D&p=1
정규식 표현이 1일차에서 배운 것 말고 더 있으나
더 모르는 거는 하면서 하면 될 것 같고 기존에 있는 정규식으로 한 번 분석하는 방식으로 연구 해보자
물론 틀릴 수도 있지만 일단 이해한 대로 써보자
일단 목표는 텍스트렉터 후킹 했을 때 괄호를 제거하는 것부터 해보자
여기 아래서 (tab)은 탭키를 누르라는 거다
일단 처음 볼 거는 이거
https://arca.live/b/yuzusoft/27714184?category=%ED%8C%81&target=all&keyword=%EB%8F%84%EC%BF%84&p=1
case.1
가나다라(가나다라)
가나다라[가나다라]
\((.*?)\)(tab)(tab)80000000(tab)1
\[(.*?)\](tab)(tab)80000000(tab)1
위에 2개를 쳐내는 정규식이 아래와 같다고 한다
한 번 분석해보면
\(는 문자 (를 뜻하고
(.*?)는 단일 문자가 0번 이상 반복되는 것이 나타날 수도 안 나타날 수도 있다는 것을 뜻한다
\)는 문자 )를 뜻한다
그러니 (문자) 로 된 모든 형식을 이야기하는 것이다
탭 이후 아무것도 없는 것을 보니 치환되는 것에 없음, 즉 없는 것으로 처리하고
처리순서는 80000000로 하고
1은 정규식을 이용한다는 뜻이다
case.2
#{(.*?)}(.*?)#(tab)$2(tab)100(tab)1
위의 상황에서 후리가나를 처리하는 방식이 위와 같다고 한다
한 번 분석 해보면
#{는 문자 #{를 뜻하고
(.*?)는 단일 문자가 0번 이상 반복되는 것이 나타날 수도 안 나타날 수도 있다는 것을 뜻한다
}는 그냥 문자 }를 뜻하고
(.*?)는 단일 문자가 0번 이상 반복되는 것이 나타날 수도 안 나타날 수도 있다는 것을 뜻한다
#는 문자 #을 뜻한다
그러니 #{문자}문자#로 된 모든 형식을 뜻한다
탭 이후로는 $2라고 나와 있는데 아마 이게 2번 째로 나온 그룹을 불러주는 명령식이 아닐까 싶다
그리고 처리 순서는 100으로
정규식으로 처리한다는 1을 쓴 거다
case.3
$[逼塞$/ひっそく$]
\$\[|\$\/.{1,100}\] 7777777 1
하고자 하는 것이 앞에 한자만 나오는 것이 목표였을 것이다
한 번 분석해보면
\$\[는 문자 $[ 를 뜻하고
|는 or을 뜻한다
\$\/는 문자 $/를 뜻하고
.{1,100}은 1~100개의 문자로 되어있는 어떤 문자를 뜻하고
\]는 문자 ]를 뜻한다
그러니 \$ 형식 혹은 $/100개 이하의 문자] 형식을 뜻한다
탭 이후 아무것도 없는 것을 보니 치환되는 것에 없음, 즉 없는 것으로 처리하고
처리순서는 7777777로 하고
1은 정규식을 이용한다는 뜻이다
대충 이 정도만 알고 응용하면 아마 괄호가 있는 후리가나 형식은 아마 다 제거할 수 있지 않을까 싶다
사실 가지고 있는 예제가 더 없어서 더 분석은 못 해본다
그 다음은 다음과 같이 후킹될 때를 연구해보고자 한다
게임 이름은 화이트 브레스 퍼펙트 에디션 플러스로
이름과 대사가 연결되어서 후킹 되는 경우 이름과 대사를 분리해서 후킹할 수 있는 지 연구해보고자 한다
해보니 ^이름(tab)이름\n(tab)10(tab)1 해결이 가능했다
^이름 은 문장이 이름으로 으로 시작할 경우를 뜻하고
이름\n 은 이름 다음 문장 바꿈 처리
10은 처리순서(그냥 임의로 숫자 넣었다)
1은 정규식 처리를 한다는 뜻이다
실제로 해보면 이렇게 나왔다
春夏로 문장이 시작하면 春夏 다음 문장이 바뀐 후 번역이 되도록 된다
이로써 이름과 대사를 분리 할 수 있을 것 같다
단지 이름마다 다 노가다 해야겠지만
생각보다 쉽게 해결이 되었다
아마 다른 예제들이 더 나올 수 있지만 그건 차차 실제로 겪으면서 공부해보고
이제 외자 번역에 대해 다음에 공부해보자