2012-11-06 3 views
1

따옴표 안에있는 모든 구를 검색 한 다음 복제하고 싶습니다. 이맥스에서정규식을 복제하는 방법

내 검색은 다음과 같습니다

M-x replace-regexp <RETURN> "*" <RETURN> $& $& <RETURN>

그러나이 작동하지 않습니다 ...

답변

5

"*" 견적 구분 된 문자열과 일치하지 않습니다 그것은 행의 모든 ​​(0이 아닌) 인용 부호와 일치합니다.

정규 표현식에서 *은 수정 자이며 파일 이름 패턴에있는 와일드 카드가 아닙니다. "0 개 이상의 이전 패턴과 일치"를 의미하므로 "*"은 "0 개 이상의 인용 부호와 그 뒤에 따옴표"가 있습니다. 즉, 한 행에 여러 개의 인용 부호가 있습니다.

"anything"의 일반적인 정규 표현식은 "any character"(.) 중 0 개 이상과 일치하는 .*입니다. 그러나 여기에는 따옴표가 포함됩니다. ".*"은 첫 번째 인용 부호에서부터 마지막 ​​큰 따옴표까지를 모두 일치시킵니다. 원하는 것은 "[^"]*"으로, 따옴표와 일치하며 따옴표가없는 숫자가 나오고 다른 따옴표가옵니다.

또한 일치 패턴은 $&이 아니라 \&입니다. 이것은 더 잘 작동 할 것입니다.

M-x replace-regexp <RETURN> "[^"]*" <RETURN> \& \& <RETURN> 
+0

또한 "*."''를 사용할 수도 있습니다. 물음표는'*','+','?'수정자를 따라갈 때 앞의 수식어를 * 비 탐욕심 *으로 만든다. 그래서'. *?'는 가능한 한 "모든 문자" 패턴. 'C-h i g''(elisp)를 참조하십시오. Regexp Special'' RET' – phils

+0

@ mark-reed는 답장을 보내 주셔서 대단히 감사합니다. 내가 Aquamacs에서 당신의 방법을 시도 할 때, 나는 대체 텍스트에서'\ '의 잘못된 사용을 얻는다. 이견있는 사람? 다시 한번 감사드립니다. – incandescentman

+0

@PeterSalazar 죄송합니다. 여기서는 Aquamacs에서 잘 작동합니다 : option-x를 치고,'replace-regexp'를 입력하고, return 키를 치고,''[^ "] *"'를 입력하고, return 키를 누르고,'\ &'를 입력하고, 스페이스 바에서'\ &'를 다시 입력하고 리턴 키를 누르고 '대체 된 0 번 발생'메시지를 얻습니다. –