Regex białe znaki

0

Jak skonstruować regex, który przyjmuje jakikolwiek znak - wraz ze znakami białymi i kończy się określoną frazą ?
Typu:

tekst
tekst
[fraza]

Zakładając, że znak nowej lini występuje 2 razy można zrobić tak
(.\s.\s)([fraza])

Ale ja nie wiem ile razy wystąpi znak biały i jaki znak biały wystąpi. Samo .* nie wystarcza, żeby wychwycić znak nowej linii. Jak to skonstruować ?

Wymyśliłem:

(.[\s].*)+

Jest ok ?

Niby ok, jeśli chodzi o część, która odpowiada wszystkim znakom z białymi, ale nie wiem jak zakończyć konkretną frazą.

0

Dla potomnych:

((.|\s)*[fraza])

Ale nadal czekam na odpowiedź, która to potwierdzi. Ktoś ma jeszcze jakiś ciekawy pomysł rozwiązania tego ?

0

Ja bym dał .*?fraza

0

Nie możesz tak, bo samo ".*?" nie chwyta znaków końca linii. Moje rozwiązanie też nie jest idealne, bo chciałbym wyciąć ciąg do pierwszego wystąpienia szukanej frazy, a mój regex dopasuje fragment do ostatniego wystąpienia. Przykład:

aaa fraza bbb fraza ccc

chce - aaa fraza
ale wg mojego będzie - aaa fraza bbb fraza

bo poprzednie wystąpienie 'fraza' będzie pasować do .*

Ciekawy jestem jak powinien wyglądać regex, który pobiera fragment do pierwszego wystąpienia danej frazy. Nikt się nie podejmie rozwiązania zagadki ? :) Może jakoś w to wplątać '\b' ?

0

Złączyć odpowiedź winerfresh oraz Regex i mamy prawidłowy wynik:

(\s|.)*?fraza

0

Ale tak jak pisałem - wtedy pobierze fragment do ostatniego wystąpienia 'fraza', nie do pierwszego :).

1

Nie w moim przypadku, gdyż ja dałem tzw. wyszukiwanie niezachłanne.

Proszę bardzo przykład działającego regexpu http://www.rubular.com/r/v7mMmBvJIs

@Regex od kiedy . nie łapie białych znaków? To powinno łapać wszystko. Może nie masz ustawionego trybu "multiline".

0

test
test2
fraza
test3
fraza
test4

Sprawdzam (.*?)fraza i match result to:

test
test2
fraza
test3
fraza

a chciałbym w match result uzyskać:

test
test2
fraza

każde wystąpienie 'fraza' przed ostatnim wystąpieniem jest dopasowane do (.*?), a nie powinno.

0

@Regex od kiedy . nie łapie białych znaków?

Nie łapie tylko znaków końca linii. Piszę to też na podstawie tego, co wyczytałem. Tutaj http://www.rubular.com/r/v7mMmBvJIs łapie. No ale to akurat nie jest kłopotem.

0

W jakiej implementacji regex działasz? (W jakim języku/bibliotece)

0
Regex napisał(a)

test
test2
fraza
test3
fraza
test4

Sprawdzam (.*?)fraza i match result to:

test
test2
fraza
test3
fraza

a chciałbym w match result uzyskać:

test
test2
fraza

każde wystąpienie 'fraza' przed ostatnim wystąpieniem jest dopasowane do (.*?), a nie powinno.

Bo tak powinno być zaznaczone jako dopasowanie bo masz n dopasowań a to zaznacza wszystkie. Wyniki masz w "Match captures" o.O Jak używasz (np, w tym przypadku Ruby) to by Ci zwróciło tablicę dopasowań, w której pierwsze było by to co podałeś.

0

W jakiej implementacji regex działasz?

W groovy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1