파일에서 서로 다른 두 가지 텍스트 패턴을 일치시키고 결과를 병합하려고 합니다. 특히 이벤트 구조의 소스 코드를 핸들러에 매핑하여 이해하고 싶습니다. 예를 들면 다음과 같습니다.
@EventHandler(MyEvent)
class MyHandler {
...
MyEvent -> MyHandler
그래서 그런 일을 하는 것은 꽤 쉽다는 것이 밝혀졌습니다 (?<=@EventHandler\()[^)]+\)\n.+?Handler
. 그러나 여러 이벤트가 발생할 수 있습니다.
@EventHandler(MyEvent, MyOtherEvent)
class MyHandler {
...
여러 줄로 나눌 수도 있습니다.
@EventHandler(
MyEvent,
MyOtherEvent,
)
class MyHandler {
...
마지막 두 예제는 다음을 생성해야 합니다.
MyEvent -> MyHandler
MyOtherEvent -> MyHandler
다음과 같은 일치 항목을 얻을 수 있지만:
MyEvent,
MyOtherEvent,
)
class MyHandler
이 두 부분을 결합하는 방법을 모르겠습니다.
정규식만 사용하여 이 작업을 수행하는 것이 현명하지 않다면 다른 솔루션을 사용할 수도 있지만 CLI 도구를 선호합니다. "올바른" 일은 프로그래밍 언어의 반영 메커니즘을 사용하는 것일 수도 있지만 그렇게 복잡할 필요는 없다고 생각합니다. 모든 이벤트 이름은 로 끝나고 Event
, 모든 핸들러 이름은 으로 끝나고 Handler
, 주석과 클래스 정의가 바로 뒤에 따른다고 가정할 수 있습니다 .
답변1
다음을 수행할 수 있습니다.
perl -l -0777ne '
while (/\@EventHandler\(([^)]+)\)\s+class\s+(\w+)/g) {
$class = $2;
print "$_ -> $class" for $1 =~ /\w+/g
}' < your-file