이 질문은 일치 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:]]+) ]]