[java] IntelliJ의 RegEx 역 참조

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

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

나는 다음을 시도했다.

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

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



답변

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

IntelliJ의 도움에서 :

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


답변

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

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

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

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


답변

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

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

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

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


답변

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


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


답변