Regex białe znaki

  • Rejestracja: dni
  • Ostatnio: dni
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ą.

  • Rejestracja: dni
  • Ostatnio: dni
0

Dla potomnych:

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

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

hauleth
  • Rejestracja: dni
  • Ostatnio: dni
0

Ja bym dał .*?fraza

  • Rejestracja: dni
  • Ostatnio: dni
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' ?

  • Rejestracja: dni
  • Ostatnio: dni
0

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

(\s|.)*?fraza

  • Rejestracja: dni
  • Ostatnio: dni
0

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

hauleth
  • Rejestracja: dni
  • Ostatnio: dni
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".

  • Rejestracja: dni
  • Ostatnio: dni
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.

  • Rejestracja: dni
  • Ostatnio: dni
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.

Xupicor
  • Rejestracja: dni
  • Ostatnio: dni
0

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

hauleth
  • Rejestracja: dni
  • Ostatnio: dni
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ś.

  • Rejestracja: dni
  • Ostatnio: dni
0

W jakiej implementacji regex działasz?

W groovy.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.