첫 번째 구분 기호 뒤의 문자열을 추출하는 bash의 정규 표현식

첫 번째 구분 기호 뒤의 문자열을 추출하는 bash의 정규 표현식

이 질문은 일치 regex해야 하므로 여기의 다른 질문과 중복되지 않습니다 .bash=~

다음과 같은 문자열이 있다고 가정해 보겠습니다.

string="ananas1kiwi2apple1banana2tree"

내가 regEx시도한 것은

[[ $string =~ .*2([[:alnum:]]{1,}) ]] && subString=${BASH_REMATCH[1]}

발생 항목과 일치하고 이를 제외한 모든 항목을 캡처해야 하며 , 나 (두 번째 일치 항목 이후의 문자열) 2만 반환합니다 . tree내 예상 결과는apple1banana2tree

간단한 구성이 누락되었다는 것을 알고 있지만 어떤 구성이 있는지는 확실하지 않습니다. 나는 bash regEx순수한 기반 솔루션만을 찾고 있습니다. 나는 다음을 통해 문자열 작업이 없다는 것을 알고 있습니다."{string#*2}"

답변1

다음을 통해 이것을 제외한 모든 것을 일치시킨 2다음 캡처하십시오 .*.

[[ $string =~ 2(.*) ]] && echo "${BASH_REMATCH[1]}"

예:

$ string="ananas1kiwi2apple1banana2tree"

$ [[ $string =~ 2(.*) ]] && echo "${BASH_REMATCH[1]}"
apple1banana2tree

당신의 문제는 무엇입니까?

  • .*2욕심이 없는( ERE에서는 사용할 수 없음) 사용 .*2하려면 을 사용할 때 마지막 항목과 일치합니다..*?[^2]*2

  • 그것은 {1,}단지+

이렇게 하세요:

[[ $string =~ [^2]*2([[:alnum:]]+) ]]

어쨌든 처음부터 일치시킬 필요는 없습니다. 다음을 수행하십시오.

[[ $string =~ 2([[:alnum:]]+) ]]

관련 정보