Mam do Was kilka pytanek :
Która ze składni wyrażeń regularnych jest najlepsza czy najpopularniejsza?
Należy do wszystkich programów stosować jedną czy do każdego inną (na przykład find)?
Po co jest ich aż tyle, z czego posix-extended i posix-egrep różnią się minimalnie (ryzyko pomyłek)?
- Używasz jakiegoś narzędzia, które rozumie wyrażenie regularne -> trzeba dostarczyć takie wyrażenia jakie rozumie narzędzie
- Akceptujesz jakieś wyrażenia regularne w Twoim narzędziu (np. jako parametry) -> powinieneś wskazać jakie akceptujesz, a nie że dowolne
Jak Twój skrypt/wyrażenie ma działać na środowiskach zgodnych z POSIX (Linuksy), to wybierasz narzędzie ze wsparciem dla wersji wyrażeń regularnych, w której najłatwiej da się problem rozwiązać (bo po co się męczyć z jakimiś potwornymi/nie do utrzymania wyrażeniami regularnymi?).
"Wyrażenia linuksowe" mogą nie działać na Uniksach opartych o SystemV czy BSD, więc jak masz przypadek, że Twój skrypt powinien działać na różnych platformach, to pewnie będziesz chciał zrealizować zadanie w oparciu o minimalny wspólny zestaw wspieranych wyrażeń regularnych (albo robił jakieś rozwiązanie typu: IF SystemV to tak, if BSD to tak, itd.)
yarel napisał(a):
- Używasz jakiegoś narzędzia, które rozumie wyrażenie regularne -> trzeba dostarczyć takie wyrażenia jakie rozumie narzędzie
- Akceptujesz jakieś wyrażenia regularne w Twoim narzędziu (np. jako parametry) -> powinieneś wskazać jakie akceptujesz, a nie że dowolne
Chodzi o to że, na przykład find akceptuje dużo różnych składni, które można wskazać jako parametry, pytanie która jest najlepsza/najbardziej uniwersalna
Z tych opisanych w linku gnu.org:
‘emacs’
Regular expressions compatible with GNU Emacs; this is also the default behaviour if this option is not used.
‘posix-awk’
Regular expressions compatible with the POSIX awk command (not GNU awk)
‘posix-basic’
POSIX Basic Regular Expressions.
‘posix-egrep’
Regular expressions compatible with the POSIX egrep command
‘posix-extended’
POSIX Extended Regular Expressions
Ja częściej używam egrepa niż finda, więc dla mnie naturalnym są posix-egrep i w findzie przełączam domyślne (emacsowe) na posix-egrep (via findowe -regextype).
Dużo zależy od tego jak interpretujesz najlepsza/uniwersalna. Gdybym używał emacsa, to pewnie naturalne byłyby emacsowe i w findzie bym nie przełączał ;-)