공부/정규식

정규식 연구 - 2

여우구이 2023. 8. 22. 23:22

잠 안 오니 계속 연구

 

찾아보니 역시 누가 상세히 설명해둔 게 있다

일단 읽어보자

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은 정규식 처리를 한다는 뜻이다

 

 

실제로 해보면 이렇게 나왔다

春夏로 문장이 시작하면 春夏 다음 문장이 바뀐 후 번역이 되도록 된다

이로써 이름과 대사를 분리 할 수 있을 것 같다

단지 이름마다 다 노가다 해야겠지만

 

생각보다 쉽게 해결이 되었다

아마 다른 예제들이 더 나올 수 있지만 그건 차차 실제로 겪으면서 공부해보고

이제 외자 번역에 대해 다음에 공부해보자