Regular expressions a języki.

0

Zainteresowałem się trochę tematem regexpów - np. : http://www.regular-expressions.info/
(polecam!)

ale mam pytanie/a:
czy ten sam zestaw regexpów może być wykorzystywany w PHP / Python / Java / Bash (zarówno command line jak i skrypty) ?
Chodzi mi w konteście unixa.
Co z javą?
co z javascript ?

kolejne pytanie:
czy wszystkie(?) regexpy można wykorzystywać w SQL, np. zapytaniach typu SELECT ?

3

Niestety nie ma żadnego standardu. Większość języków bazuje chyba na perlowych regexpach, ale miedzy silnikami regexów są różnice, tak że nie skopiujesz bez testowania ;)

1

Regex jako regex, rzadko kiedy różni się zapisem. Inne funkcje wykonują regex-a i w różny sposób. Reguły masz przejrzyste. Zaczynasz, przykładowo od "^" co oznacza że ciąg wyrażeń rozpoczyna się od etc. Na pewno nie będziesz miał problemów z przejściem na inne języki, jeśli nauczysz się w jednym. Nie pamiętam w tej chwili, ale wydaje mi się że były jakieś minimalne różnice w jakimś języku.

Nie ma raczej znaczenia czy wywołujesz skrypt, czy jak nazwałeś używasz go w command line. Tak naprawdę używasz tego samego programu. Masz plik validation.py, zostaje on wykonany po wpisaniu python validation.py w istocie wywołujesz ten sam program gdybyś napisał python i następnie wprowadzał kod.

0

ok dzięki za komentarze

wie ktoś co z SQL oraz PL/SQL ?

załóżmy, że wkuję/przećwiczę regexpy typowo unixowe (np. na samym bash). Czy będę mógł je później zastosować np. w SELECT np. na bazie Oracle ?

0

Co rozumiesz przez "zastosować np. w SELECT np. na bazie Oracle"?

Regex jako regex, rzadko kiedy różni się zapisem.

Polemizował bym. Podstawowe operatory rzeczywiście są z reguły podobne, tzn. domknięcie Kleene'go i grupowanie znaków. Ale potem jest sporo różnic, ex.:

  • PCRE używa () do grupowania, natomiast w Vi trzeba to escapować \(\) (chyba, że używasz magic)
  • POSIX ma grupy znaków zapisywane jako [:digit:], PCRE \d
  • Oniguruma ma jeszcze inne dziwnostki, jak np. \A i \z czy nazwane grupy
  • Różnice między \b, \< oraz \> i ich dostępność w różnych składniach

Więc na pierwszy rzut oka wygląda jakby nie było różnic, ale rzeczywistość bywa brutalna

0

Wczoraj nad tym siedziałem, czytałem, eksperymentowałem. Odkryłem takie dziwne rzeczy:
(dygresja: w ogóle to temat jest ciekawy i wydaje mi się, że może poprawić produktywność w kilku dziedzinach)

no więc oprócz regexpów mamy coś takiego jak glob używany do opisu ścieżek oraz plików: https://en.wikipedia.org/wiki/Glob_(programming)

jest to taki bardzo "prymitywny regexp". I wydawałoby się, że są jakieś podobieństwa ze standardowymi regexpami, ale są też różnice (i nawet konflikty!)! Przykład (i pytanie jak go rozwiązać):

Mamy 6 folderów o takiej nazwie w bash:
% ls 001 0a0 003 0a a0 111a

i teraz tak - jak ułożyć wyrażenie, które przejdzie do folderu: zawierającego 2 lub 3 znaki (i tylko tyle) na początku, oraz kończącego się na a?
przykład:
cd ??
nie działa, bo bierze foldery 0a lub a0
cd ?a
działa, ale znowu zawiera tylko i wyłącznie 2 znaki (a ja chcę 2 lub 3, a ten 3ci z przodu).
cd *a*
i on już nie działa (bo zawiera dowolną ilość znaków tył/przód, a środek jest na a) - bo chce przejść albo do 0a albo do 0a0 albo do 111a.
cd *a
źle działa, bo zawiera dowolną ilość znaków z przodu i wychwytuje też np 111a (a nie powinien)

natomiast w regexp standardowych jest też . (kropka : http://regexone.com/lesson/wildcards_dot), a wtedy można zaznaczyć znak dowolny lub nic (null) - i teoretycznie byłoby coś takiego
cd .?a
przechodzi do folderu zawierającego konkretnie 2 lub 3 znaki, oraz kończącego się na a. Przy czym z tego co doczytałem to? jest inaczej interpretowany w regexpach, a więc rozwiązanie chyba i tak jest niepoprawne.

nie wiem czy czegoś nie namieszałem, ale generalnie chodzi, że glob pattern to coś innego od regexpów (ma zdecydowanie mniejsze możliwości). Zauważyłem więc, że konkretny program lub język programowania muszą korzystać z regexpów (np. sed). A jak nie korzystają, to nie można ich sensownie używać np. w bashu (bo w czystym bashu są tylko ograniczone glob patterns).

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