Eclipse, 정규식 검색 및 바꾸기


119

Eclipse에서 정규식 검색 및 바꾸기를 수행 할 때 일치하는 검색 문자열을 대체 문자열의 일부로 사용할 수 있습니까?

기본적으로 모든 항목을 바꾸고 싶습니다.

variableName.someMethod()

와:

((TypeName)variableName.someMethod())

여기서 variableName 은 모든 변수 이름이 될 수 있습니다.

sed 에서는 다음과 같이 사용할 수 있습니다.

s/[a-zA-Z]+\.someMethod\(\)/((TypeName)&)/g

즉, & 는 일치하는 검색 문자열을 나타냅니다. Eclipse에 비슷한 것이 있습니까?

감사!


Eclipse RegEx에 대한 좋은 문서 : help.eclipse.org/kepler/…
Kolob Canyon

답변:


225

예, "()"는 그룹을 캡처합니다. i가 i 번째 캡처 그룹 인 $ i와 함께 다시 사용할 수 있습니다.

그래서:

검색: (\w+\.someMethod\(\))

바꾸다: ((TypeName)$1)

힌트 : 텍스트 상자의 CTRL+ Space는 정규식 작성에 대한 모든 종류의 제안을 제공합니다.


그것은 좋은 대답이며 유용한 힌트입니다. 조금 더 자세히 설명했다면 더 도움이되었을 것입니다.
iammilind 2013 년

Bravo Eclipse,이 기능을 제대로 구현했습니다!
Kenogu Labz 2013

저는 특히 "유니 코드 문자 용 16 진수 코드"예제를 좋아합니다. :)
Stewart Murrie

정말 도움이 된 코드를 추가하고 싶습니다. 나는 모든 교체 할 필요 stringVar.equals("xxx")와 함께 "xxx".equals(stringVar). 찾기 / 바꾸기 대화 상자에서 다음 정규식을 사용했습니다 : search: ([^()! ]+).equals\("(.*)"\), replace: "$2".equals\($1\).
LaDude

나를 위해. 항상 첫 번째 그룹을 대체합니다 ...?
RightmireM

6

...
search = (^. * import) (. *) (\ (. * \) :)
replace = $ 1 $ 2 사용

... 대체 ...

from checks import checklist(_list):

...와...

from checks import checklist



정규식의 블록은 괄호로 표시됩니다 (앞에 "\"가 붙지 않음)

(^. * import)는 "from checks import"를 찾아서 $ 1로로드합니다 (eclipse는 1에서 계산 시작)

(. *) 다음 찾기 " 다음 부분 (아래 다음 줄 참조)

(\ (. * \) :)이 "처음에"( "$ 2 블록을 시작한 후 ... $ 2 블록을 중지하고 $ 3을 시작합니다. $ 3은"( 'any text') : "또는 예에서"(_list) : "와 함께로드됩니다.

그런 다음 교체에 세 블록을 모두 처음 두 블록으로 교체하려면 $ 1 $ 2.



스크린 샷


3

NomeN 은 올바르게 대답했지만이 대답은 저와 같은 초보자에게는별로 유용하지 않을 것입니다. 해결해야 할 또 다른 문제가 있고 거기에서 RegEx를 사용하는 방법을 알 수 없기 때문입니다. 그래서 이것에 대해 약간의 설명을 추가하고 있습니다. 정답은

검색 : (\ w + \. someMethod \ (\))

바꾸기 : ((TypeName) $ 1)

여기:

찾는 중:

  • 첫 번째와 마지막 '(' ')'는 정규식의 그룹을 나타냅니다.

  • '\ w'는 단어를 나타냅니다 (영숫자 + 밑줄).

  • '+'는 하나 이상 (즉, 하나 이상의 영숫자 + 밑줄)을 나타냅니다.

  • '.' 는 모든 문자를 나타내는 특수 문자입니다 (예 :. +는 하나 이상의 문자를 의미 함). 이것은 '.'를 묘사하는 특수 문자이기 때문입니다. 이스케이프 문자, 즉 '.'를 제공해야합니다.

  • 검색되는 그대로 'someMethod'가 주어집니다.

  • 두 개의 괄호 '(', ')'는 그룹을 묘사하는 데 사용되는 특수 문자이므로 이스케이프 문자와 함께 제공됩니다 (다음 지점에서 그룹에 대해 설명합니다).

교체 :

  • ' ((TypeName) $ 1) ' 이 주어지며 여기서 $ 1은 그룹을 나타냅니다. 검색 필드에서 첫 번째 및 마지막 괄호 '(', ')'로 묶인 모든 문자입니다.

  • 또한 바꾸기 상자 찾기에서 '정규식'옵션을 선택했는지 확인하십시오.

RegEx에 대한 자세한 내용은 http://regexr.com/ 에서 찾을 수 있습니다 .


2

적어도 STS (SpringSource Tool Suite) 그룹은 0부터 시작하여 번호가 지정되므로 교체 문자열은

replace: ((TypeName)$0)

5
그것은 진정한 afaik이 아닙니다. $ 0는 전체 원래 검색어를 나타냅니다. 이 경우 우연히 작동 할 것이라고 생각합니다.
Walter Heck

0

Eclipse에서 regxp를 사용하는 방법에 대한 설명과 예제가 필요한 사람을 위해. 다음은 문제를 설명하는 내 예입니다.

여기에 이미지 설명 입력

이름을 바꾸고 싶습니다

/download.mp4^lecture_id=271

/271.mp4

그리고 이것들은 여러 개있을 수 있습니다.

수행 방법은 다음과 같습니다.

여기에 이미지 설명 입력

그런 다음 찾기 / 바꾸기 버튼을 누릅니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.