2014-04-09 12 views
1
나는 다음과 같은 문자열을 대체하기 위해 정규식 검색을 사용

: 내가 사용에디터가 지원하지 않는 경우에도 정규식에서 가장 작은 일치 대체 할 방법이 아닌 욕심 경기

\textbf{test1}test2 

\new{}\new{\textbf{test1}}\new{test2} 

을 정규식은 \ new {(. *)}로 바꾸고 \ 1은 바꿉니다.

검색이 항상 내 원래 문자열의 전체 라인을 일치하고 교체 그러나 reuslt입니다 : 지금까지 내가 필요한에서

}\new{\textbf{test1}}\new{test2 

.

Java에서 정규식을 사용하는 경우? 한정 기호가 마지 못해 한정 기호가 된 후에. 그런 다음 가장 작은 일치 항목을 찾습니다. 그래서 자바, 내 검색 정규식 표현은

\\new\{(.*?)\} 

나는 작은 경기를 할 TeXStudio에서 해당 정규식 검색 문자열을 필요로 할 것이다. TexStudio가 탐욕심이없는 매치를 지원하지 않더라도 어쨌든이 경우에도 여전히 작동합니까?

답변

1

둥지가 얼마나 깊숙이 깊숙이 들어가는 지 알고 계십니까? 새로운 것을 새로운 것으로 중첩 할 수 있습니까?

답변이 경우 '예'와 '아니오'솔루션이 : 로빈의 솔루션과 [^}]* 교체 \\new\{([^}]*)\} 어쩌면 오프닝 다음에 "{}하지 않은 문자의 수는"인, 예를 들어, [^{}]*({[^{}]*})?[^{}]* 괄호, 여러 개의 괄호 및 닫는 괄호와 함께 0 개 이상의 괄호가 없습니다. 이것은 최대 두 개 중첩과 일치합니다. 여분의 모든 중첩 수준에 대해 [^{}]* 중간을 (4 수준)과 같은 재미로 이어지는 [^{}]*({[^{}]*})?[^{}]*으로 바꿔야합니다.

Example for 2 levels
Example for 4 levels

+0

감사합니다. 이 도움. –

2

편집 : 슬프게도이 솔루션은 \new{\foo{text}}과 같은 중첩 패턴과 일치하지 않습니다.

정규 표현식과 일치하는 균형 패턴을 알기까지는 재귀 패턴이 필요하며 TeXStudio가 지연 지정자를 지원하지 않으면 필자는이를 지원할 것입니다.

이 번역문에 대한 설명이 아니야 : \\new\{(.*?)\} : 테스트 케이스에서 \textbf{test1test2을 반환합니다.

당신이 원하는 것을하기 위해 TeXStudio 정규식보다 다른 도구를 찾아야한다고 생각합니다.


꽤 제한된 것 때문에 TeXStudio가 지원하는 경우 나도 몰라,하지만 텍스트가 포함되지 않은 경우 }하면 "}하지만 아무것도"의미

\\new\{([^}]*)\} 

[^}] 사용할 수 있습니다. 이 방법으로 게으른 한정 기호에 대한 필요가 없습니다.

그래도 문제가 해결되지 않으면 다른 각도에서 문제를 해결하고 \new{}을 빈 문자열로 바꿀 수 있다고 생각합니다. 입력에 따라 나머지 코드를 중단하고 싶지 않을 수도 있습니다. .

실제로 입력 한 내용이 \new{} 인 경우 } *\new{ 버전을 사용하여 다른 원치 않는 }을 바꾸지 않고 수동으로 두 경우를 수행 할 수 있습니다.

+0

좋은 생각하지만, 우리가 텍스 – aelor

+0

감사의 내용물을 초래 몰라. \\ new \ {([^}] *) \} 특별히 작동합니다. 그러나 나는 또한 내 텍 스트에 \ new {\ textbf {test}} 같은 것을 가지고있다. 그래서 여전히 문제가 있습니다. 나는 \\ new \ {([^ (\\ new)] *) \}을 시도했습니다. 그러나 그것도 작동하지 않습니다. 저의 표현은 문제가 있습니까? 내 말은 정규식에서 "\ new {"가 포함되지 않은 하위 문자열이 필요하다고 말하는 것입니다. –

+0

@Leo : 중첩 된 패턴과 일치 시키려면 ... 원본 게시물을이 예제로 업데이트하십시오. 'text '가 균형 잡힌'{...}'을 포함 할 수 있다면 다른 질문. – Robin