2013-08-23 13 views
15

Próbuję użyć wyrażenia regularnego, aby znaleźć część ciągu i wybrać wszystko do tego ciągu. Tak na przykład jeśli mój ciąg znaków to this/is/just.some/test.txt/some/other, chcę wyszukać .txt i kiedy go znajdę, zaznacz wszystko przed i do .txt.Wyrażenie regularne do zaznaczania wszystkiego przed i do określonego tekstu

+0

Przez "wybierz wszystko przed i do .txt", miałeś na myśli "wybierz wszystko przed i włączając .txt"? Jeśli tak, dotychczasowe odpowiedzi są nieprawidłowe. W przeciwnym razie "przed" i "do" są zbędne. –

+0

@Jim L - Powiedziałbym, że oznacza do końca .txt, a nie do początku .txt – pguardiario

+0

Jakie może być rozwiązanie, aby uchwycić tylko całe słowo przed .txt? W tym przypadku "test". –

Odpowiedz

27

Po wykonaniu poniższego wyrażenia, twoja odpowiedź jest w pierwszym uchwyceniu.

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

Fajnie, pokonaj mnie. Zauważ, że w zależności od tego, z jakiego silnika regex korzystasz, możesz nie potrzebować zawijania '/' – vroomfondel

+0

Tak, dobra uwaga. Jestem w Vim, Ruby lub JS 24/7 i zawsze o tym zapominam>. kikuchiyo

20

To wszystko pasuje do ".txt" (bez włączania go):

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

+1

+1 za pozytywne twierdzenie z wyprzedzeniem o zerowej szerokości. Nie, to naprawdę robi dużą różnicę w tej sprawie. –

+0

Załóżmy, że chcesz http://url.com/users/2 w http://url.com/users/2/some/stuff/after, w jaki sposób możesz również dołączyć narzędzie Matcher? – Ben

4

Można po prostu zrobić ...

(.*?)\.txt 

tested here..

+0

Nie będzie działać z dwóch powodów: nie uciekniesz z '.', a twoje'. * 'Jest chciwe. A co z abctxt? (abc, zamiast bez dopasowania) i abc.txt.txt? (abc.txt, zamiast abc) – vroomfondel

+0

+1, to jest rzeczywiście lepsze niż moja odpowiedź, ponieważ nie potrzebowałem '' 'w moim regex (było zbędne). – kikuchiyo

1

Do txt włącznie musiałbyś zmienić swój r egex like yes:

^(.*?\\.txt) 
Powiązane problemy