정규식에서 외부 괄호를 버리고 내부 괄호를 고려할 수 있습니까?

정규식에서 외부 괄호를 버리고 내부 괄호를 고려할 수 있습니까?

괄호가 포함된 패턴이 많고 괄호를 고려하지 않고 그 안/사이에 있는 것만 고려하는 정규식을 만들었는데, 괄호 안의 텍스트에도 [] 괄호가 포함되어 있으면 문제가 있습니다.

감사해요!

정규식:(?<inside_value>(?<=\[).*?\[?(?=\]))

예를 들어,

A)   [ClusterReceiver[99]            ]
B)   [first-second-third-8050-exec-a       ]

위에서 B)는 잘 작동하지만 A)는 작동하지 않습니다.

각 사례에 대해 반환되는 내용(따옴표 제외):

B) "first-second-third-8050-exec-a "
A) "ClusterReceiver[99"

당신은 무엇을 원해요?

B) "first-second-third-8050-exec-a "
A) "ClusterReceiver[99]"

문제는 [ ]쉘이 브래킷 쉘 내부에 있다는 것입니다 [ ].

최악의 시나리오, A)와 같은 문제가 있을 때 A)에서 요구하는 "ClusterReceiver[99]"를 얻기 위해 최소한 1개의 브래킷을 허용하는 방법에 대한 제안을 도와주실 수 있습니까?

답변1

사용pcregrep

$ pcregrep -o1 -o2 '([^[]*)\[([^]]*[[:alnum:]]][^]]*).*' input_file
A)   ClusterReceiver[99]
B)   first-second-third-8050-exec-a

관련 정보