Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Strony: 1



 Łowca lamerów
	



Elo. 
Od jakiegoś czasu ostro przysiadłem nad wyrażeniami regularnymi, bo okazuje się że nie taki diabeł straszny, a do tego ratuje dupę w wielu sytuacjach ^_^
Otwieram szafę i gadam do rzeczy. 
Idąc dzisiaj ulicą (tak tak, za firewallem) zauważyłem witryny optyka i apteki. Pomyślałem jakby najlepiej zmatchować to jednym regexem, ale w taki sposób żeby słowa były sensowne. 
Narazie wymyśliłem jak łapać wszystko, możliwie najkrócej
juzek@chost ~ $ echo 'apteka
optyka
papryka
opteka
aptyka' |egrep --color=auto '[a|o]pt[e|y]ka'
apteka
optyka
papryka
opteka
aptyka
No, myślę że zrozumiale się wyraziłem :P
Chciłbym dopasować 'e' tylko wtedy jesli wczesniej dopasował 'a'. 
Jak to zapisać w wyrażeniu regularnym?
Offline



 Użytkownik
	Niestety - wyrażenia regularne mają wiele zalet ale i kilka wad.
W Iconie (język będący prekursorem regexów) zapisanie czegoś takiego byłoby trywialne.
Tu musisz zrobić coś w stylu a.*e - tak na początek.
Offline





 Bicycle repairman
	


 Łowca lamerów
	



hm, Twój regex niczego mi nie łapie. Korzystam z egrepa.
o co chodziło w zamierzeniu?
Offline





 Bicycle repairman
	





[user@komp ~]$ cat > teka.txt optyka opteka apteka aptyka [user@komp ~]$ grep -P '.pt((?<=a..)e|(?<=o..)y)ka' teka.txt optyka apteka [user@komp ~]$
Wyrażenie dopasuje e kiedy na początku będzie a, i dopasuje y kiedy na początku będzie o.
Offline
For such tasks much more useful may be special libraries, like
http://search.cpan.org/dist/String-Approx/Approx.pm
Jestem wpewniona że są podobny w innych językach.
And at all - "fuzzy regex" search results in google.
Offline
About regex itself here - I would use:
egrep --color=auto '[a|o]pt[e|y]ka' 
| in [] isn't necessary. 
This can be written as:
egrep --color=auto '[ao]pt[ey]ka'
or
egrep --color=auto '(a|o)pt(e|y)ka'
.
[] means set of characters. Any of the character mentioned inside [] will fit. Of course if ^ is not the first character inside [].
[^abc] means all characters except a or b or c.
|means or. We can group expressions using ().
Best regards,
Irina
Offline



 Dzban Naczelny
	Dzękuję bardzo. To miło.
Bot. Spam Bot.
Offline


 Członek DUG
	


 Dzban Naczelny
	

 Członek DUG
	Niestety nie mam dużo czasu żeby się uczyć. Muszę pracować.
Bylo przyjemne porazmawiać )
Pa!
Offline



 Łowca lamerów
	



irkaqq my question was about matching likewise sounding/looking words. I deliberately used pipe | character to show what i am after ;)
But finally i solved my problem using capture groups and conditional matching. I am wondering now whether it can simplified ;)
juzek@chost ~ $ echo 'apteka
> optyka
> papryka
> opteka
> aptyka' |grep -P --color=auto '(a)?(o)?pt(?(1)e)(?(2)y)ka'
apteka
optyka
Innymi słowy: jeśli pierwsza grupa się spasuje, to szukamy 'e'.
czadman, sorry, irkaqq napisała i nie zauważyłem Twojej odpowiedzi ;) Sprytne :)
Ostatnio edytowany przez lis6502 (2018-04-02 15:03:07)
Offline
Strony: 1