IntelliJ의 RegEx 역 참조


129

IntelliJ의 찾기 및 바꾸기 기능을 사용하여 다음 변환을 수행하고 싶습니다.

// Replace this
model.put('foo', 'bar')
// With this
model['foo'] = bar

나는 다음을 시도했다.

찾을 텍스트 model.put\((.*),(.*)\) :model\[\\1\] = \\2

그러나 IntelliJ를 인식하지 않는 것 \\1\\2역 참조한다. 또한 단일 슬래시를 시도했지만 작동하지 않습니다.

답변:


196

IntelliJ는 대체 역 참조를 $1위해 사용 합니다.

IntelliJ의 도움에서 :

정규 표현식 및 구문에 대한 자세한 정보는 java.util.regex 문서를 참조하십시오. 역 참조는 \ n 형식이 아니라 $ n이어야합니다.


15
jetbrains.com/idea/help/… 와 같은 "\"는 필요하지 않습니다 . 또한 나를 위해 그룹을 "()"으로 명시 적으로 묶어야 만 작동합니다. 그렇지 않으면 나중에 참조 할 수 없습니다. 예 : 검색 (foo)교체 :$1bar
Ghedeon

@Ghedeon : 아마도 답변이나 기존 답변에 의견을 추가해야합니다. 표현을 ()에 넣으라는 당신의 제안은 저에게 효과적입니다.
mindreader

+1 내 관련 문제를 해결 정보의 비트 : 난, 즉 달러 곱슬 래퍼와 변수 주위에 인용 플러스 래퍼를 교체하고 있습니다 '+ var +'${var}일부 서식 문자열과 인 IntelliJ는 교체를 완료하지 왜 알아낼 수 없었다. 알고 보니 $필요는 교체에서 탈출합니다.
worc

13

즉, 역 참조 를 대체 할 때는 $1to $n를 사용해야 합니다. 구문은 검색 내 역 참조 전용입니다.\1

IntelliJ 2016에서 인앱 설명서가 잘못되었습니다. 전체 문서에서 더 나은 인용문은 다음과 같습니다.

현재 정규 표현식 외부의 어딘가에 일치하는 부분 문자열을 참조해야하는 경우 (예 : 다른 정규 표현식의 대체 문자열) 달러 기호 ($ num, 여기서 num = 1..n)를 사용하여 검색 할 수 있습니다.

출처 : 2016.1 정규 표현식 구문, 팁 및 유용한 정보


2

Idea 9.0 (및 다른 버전)의 정규 표현식에 대한 제품 내 상황 별 도움말이 올바르지 않은 것 같습니다. 이것은 이것을 나타냅니다 :

  역 참조
  \엔
  n 번째 캡처 그룹과 일치하는 내용

그러나 분명히 이전 답변에서 언급했듯이 내 경험으로는 \ n이 아니라 역 참조의 경우 실제로 $ $ n입니다.

"텍스트 바꾸기"대화 상자에서 "일반 표현식"라디오 옵션 옆에있는 '[도움말]'링크를 클릭하면 상황에 맞는 도움말을 볼 수 있습니다.


0

IntelliJ IDEA / 참조 / 정규식 구문 참조


하위 표현식과 일치하고 일치를 기억합니다. 동일한 정규식 내에서 일치하는 하위 문자열을 사용해야하는 경우 역 참조 (\ num, 여기서 num = 1..n)를 사용하여 하위 문자열을 검색 할 수 있습니다. 현재 정규 표현식 외부의 어딘가에 일치하는 부분 문자열을 참조해야하는 경우 (예 : 대체 필드의 다른 정규식) 달러 기호 ($ num, 여기서 num = 1..n)를 사용하여 검색 할 수 있습니다. 하위 표현식에 괄호 문자를 포함해야하는 경우 "("또는 ")"를 사용하십시오.


나는 여기서 같은 것을 발견했다 . 그러나 나는 백 슬래시없이 궁극적으로 $ 1를 사용하여 성공했습니다.
Joe Tricarico
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.