대괄호 사이의 모든 항목과 일치하는 정규식

대괄호 사이의 모든 항목과 일치하는 정규식

지금까지 다음 정규식이 있습니다.

printf "this is (test.com)\n" | grep -Po '(?<=\().*(?=\))'

위의 정규식은 원하는 출력을 인쇄합니다.테스트넷

코드에 새 괄호를 추가하는 한

printf "this is (test.com) and (alex)\n" | grep -Po '(?<=\().*(?=\))'

, 다음을 표시합니다.

test.com) 및 (Alex

내 정규 표현식이 대괄호 사이에 있는 내용을 인쇄하기를 원합니다(갯수에 상관없이). 추가적으로 괄호 사이에 특정 길이의 단어만 인쇄하는 조건을 추가하고 싶습니다.

예: (aaa) 테스트1 (bbb) 테스트 테스트 (ccc) 테스트 (예) (ddd)

괄호 안에 길이가 3인 단어만 인쇄하고 싶습니다. 따라서 출력은 다음과 같아야 합니다.

아아 bbb ccc ddd

답변1

표현방식에 최대한 주의해주세요최고길이( gready regex)가 일치합니다. 예제에서 볼 수 있듯이 (정규식: 대괄호 사이의 기호)가 선택되었습니다.

  • ...예(test.com) 및 (Alex)

바꾸다

  • ...예(테스트넷) 그리고(알렉스).

이 동작을 재정의하는 방법에는 두 가지가 있습니다.

  1. any symbol한계 또는 구분 기호 로 바꿉니다 revers match(예: (.*)by([^)]*)
  2. 최신 정규식(예: PCRE)을 사용하면 수량자를 다음과 같이 지정할 수 있습니다.게으른. 그들은 게으르게 만들기 위해 수량자 뒤에 물음표를 붙였습니다 .*?. 게으른 수량자를 사용하면 표현식에서 가장 작은 일치 항목을 먼저 시도합니다.

첫 번째 변형 이상으로 이는 단순화된 정규식을 허용합니다.grep -Po '\(\K[^)]*'

관련 정보