2013-08-23 2 views
15

정규 표현식을 사용하여 문자열의 일부를 찾고 해당 문자열까지 모든 것을 선택하려고합니다. 예를 들어, 내 문자열이 this/is/just.some/test.txt/some/other 인 경우 .txt을 검색하고 이전에 모든 것을 선택하면 .txt까지 검색합니다.정규 표현식을 사용하여 모든 텍스트를 선택하십시오.

+0

"전에 모든 것을 선택하고 .txt까지"를 선택하면 "전에 모든 것을 선택하고 .txt를 포함하여"를 의미합니까? 그렇다면 지금까지의 답변이 잘못되었습니다. 그렇지 않으면 "이전"과 "최대"가 중복됩니다. –

+0

@Jim L - 그가 .txt의 끝 부분까지가 아니라 .txt의 처음까지를 의미한다고 말하고 싶습니다. – pguardiario

+0

.txt 전에 완전한 단어 만 캡처하기위한 해결책은 무엇입니까? 이 경우 "테스트". –

답변

27

아래의 정규 표현식을 실행 한 후에는 첫 번째 캡처에서 답을 얻을 수 있습니다.

/^(.*?)\.txt/ 
+2

좋은, 펀치에 나를 이길. 어떤 정규 표현식 엔진을 사용 하느냐에 따라 '/'포장을하지 않아도됩니다. – vroomfondel

+0

예, 좋은 지적입니다. 나는 Vim, Ruby, 또는 JS 24/7에 있는데, 나는 이것에 대해 항상 잊어 버린다.> kikuchiyo

20

이 모든 것을 일치까지 (이를 포함하지 않고) "가 .txt"로 :

^.*(?=(\.txt))

+1

제로 폭 긍정적 인 lookahead 어설 션을 위해 +1. 이 경우 실제로 많은 차이가 있습니다. –

+0

http://url.com/users/2/some/stuff/after에서 http://url.com/users/2를 원한다고 가정 해 봅시다. 정규 표현식도 함께 포함 시키려면 어떻게해야합니까? – Ben

4

당신은 그냥 할 수 ...

(.*?)\.txt 

tested here..

+0

두 가지 이유로 작동하지 않습니다 : 당신은'.'을 벗어나지 않고'. *'는 욕심입니다. abctxt는 어떻습니까? (abc, 일치하는 대신) 및 abc.txt.txt? (abc.txt, abc 대신) – vroomfondel

+0

+1, 실제로 내 정규 표현식에서'^'가 실제로 필요하지 않았기 때문에 이것이 내 대답보다 낫습니다 (중복되었습니다). – kikuchiyo

1

최대 txt까지 r을 변경해야합니다. egex like :

^(.*?\\.txt) 
관련 문제