오직 하나의 인스턴스를 모두 정규 표현식으로 바꾸고 싶습니다. Go의 regexp
라이브러리를 사용하면 어떻게됩니까?하나의 어커런스를 regexp로 바꾸기
입력 : foobar1xfoobar2x
정규식 : bar(.)x
교체 : baz$1
ReplaceAllString
출력 : foobaz1foobaz2
ReplaceOneString
출력 : 일반적으로 foobaz1foobar2x
오직 하나의 인스턴스를 모두 정규 표현식으로 바꾸고 싶습니다. Go의 regexp
라이브러리를 사용하면 어떻게됩니까?하나의 어커런스를 regexp로 바꾸기
입력 : foobar1xfoobar2x
정규식 : bar(.)x
교체 : baz$1
ReplaceAllString
출력 : foobaz1foobaz2
ReplaceOneString
출력 : 일반적으로 foobaz1foobar2x
, 당신은 시작과 끝을 위해 게으른 경기 및 사용 앵커를 사용하는 경우 첫 번째 동작을 바꿀 수 있습니다.
replace `^(.*?)bar(.*)$` with `$1baz$2`.
예 :
package main
import (
"fmt"
"regexp"
)
func main() {
src := "foobar1xfoobar2x"
pat := regexp.MustCompile("^(.*?)bar(.*)$")
repl := "${1}baz$2"
output := pat.ReplaceAllString(src, repl)
fmt.Println(output)
}
출력
foobaz1xfoobar2x
내가 잘못하고있는 것 : http://play.golang.org/p/RiIRIRIdDWs –
다음의 문자로 유효한 식별자 이름을 만들면 그룹 변수를 곱슬 곱슬 할 필요가있다. 업데이트 된 대답을 보자. – perreal
' (. *)'적절한 대체와 함께 정규식의 끝에 var 충분하다? –
내 패턴이 매우 복잡했기 때문에 내가 허용 솔루션을 사용 cound't. 내가 ReplaceAllStringFunc를 사용하여 결국 : 이 API에 따라 https://play.golang.org/p/ihtuIU-WEYG
package main
import (
"fmt"
"regexp"
)
var pat = regexp.MustCompile("bar(.)(x)")
func main() {
src := "foobar1xfoobar2x"
flag := false
output := pat.ReplaceAllStringFunc(src, func(a string) string {
if flag {
return a
}
flag = true
return pat.ReplaceAllString(a, "baz$1$2")
})
fmt.Println(output)
}
. 지금 무엇을 사용하고 계십니까? 이는 귀하를 위해 문서를 읽는 데 도움이 될 수 있습니다. – Qtax
@Qtax, Go의 regexp 라이브러리 ['Regexp.ReplaceAllString'] (http://golang.org/pkg/regexp/#Regexp.ReplaceAllString)를 사용하고 있습니다. 'ReplaceOneString'에 해당하는 api가 존재하지 않는 것 같습니다. –
해결 방법으로 [다음] (http://regex101.com/r/mX7tN4)을 시도해 볼 수 있습니다 (철저히 테스트하지 않았습니다). – HamZa