Not logged in. · Lost password · Register
Forum: Fedora Programowanie i kompilacja RSS
wyrażenie regularne

Announcement

2006-06-03, 10:40 by gajownik
Subject: Zanim coś napiszesz...
Witamy w naszych niskich progach ;-)

Zanim coś napiszesz na forum:
1. zapoznaj się z Wiki i FAQ a także Poradnikiem - są tam odpowiedzi na najczęściej pojawiające się pytania
2. skorzystaj z forumowej wyszukiwarki i/lub Google - jest spora szansa, że ktoś już rozwiązał Twój problem
3. uaktualnij cały system
4. przeczytaj regulamin oraz tekst na temat mądrego zadawania pytań
5. jeśli masz jakiś problem, przekaż nam o nim odpowiednią ilość informacji - jak na razie nie potrafimy jeszcze wróżyć z fusów
6. dla każdego nowego problemu twórz osobny wątek używając jednak zdrowego rozsądku
7. nie pisz niczego, czego wstydził(a)byś się przed swoją mamą ;-)

Życzymy miłej zabawy - zespół fedorapl.org
Create new thread · Reply
Avatar
Reply · Quote neo_fox #1 ()
since Jan 2007 · 24 posts
Group memberships: Użytkownicy
Show profile · Link to this post
Subject: wyrażenie regularne
Mam taki mały problem. Plik z takimi wpisami

define('ABC', 'coś tam');
define('DEF', 'coś innego');
....  x 800 ;-)
a potrzebuje mieć coś takiego:

defined('ABC',) or define('ABC', 'coś tam');
defined('DEF') or define('DEF', 'coś innego');

Jak musiałby wyglądać regex aby ten plik tak przerobić ??

Będę wdzięczny :-D ..
Joomla Yellow Pages Component
Joomla Directory Component
Avatar
Reply · Quote ecik #2 ()
User title: Paczker
since Sep 2006 · 49 posts · Location: Rybnik
Group memberships: Użytkownicy
Show profile · Link to this post
Zakładam, że wszystkie linie masz w identycznym formacie, tj. nie zdarza się, że są dwie spacje po przecinku itp. (jeśli by tak było to trza wyrażenie regularne dopracować ;)). W takim wypadku powinno działać coś takiego:
[ecik@ecik ~/temp]$ cat dane
define('ABC', 'coś tam');
define('DEF', 'coś innego');
define('ECIK', 'ableble');
[ecik@ecik ~/temp]$ cat dane | sed -n  "s|define('\(.*\)', '\(.*\)');|defined('\1') or \0|p"
defined('ABC') or define('ABC', 'coś tam');
defined('DEF') or define('DEF', 'coś innego');
defined('ECIK') or define('ECIK', 'ableble');
To polecenie cat dane | sed -n  "s|define('\(.*\)', '\(.*\)');|defined('\1') or \0|p" możesz oczywiście gdzieś jeszcze przekierować do pliku jeśli chcesz (ale innego niż źródłowy, bo wtedy wszystko stracisz...) ;)

EDIT: Tak właściwie to regex mógłby być jeszcze usprawniony znakami początku i końca linii, ale nie jest to chyba konieczne ;)
Paczker i fan Fedory
... moje zapiski...
... i strona na wiki
This post was edited on 2007-02-18, 01:01 by ecik.
Avatar
Reply · Quote neo_fox #3 ()
since Jan 2007 · 24 posts
Group memberships: Użytkownicy
Show profile · Link to this post
Dzięki serdeczne. Genialna rzecz i zadziałała natychmiast :-D

Żebym jeszcze zrozumiał co to znaczy :-(
Musiałbym się tego pouczyć ;-)

Jeszcze raz dziękuje
Joomla Yellow Pages Component
Joomla Directory Component
Avatar
Reply · Quote ecik #4 ()
User title: Paczker
since Sep 2006 · 49 posts · Location: Rybnik
Group memberships: Użytkownicy
Show profile · Link to this post
Quote by neo_fox:
Żebym jeszcze zrozumiał co to znaczy :-(

To nic trudnego ;)
Oto mamy polecenie: sed -n  "s|define('\(.*\)', '\(.*\)');|defined('\1') or \0|p". Tak więc kolejno:
  • Najpierw mamy polecenie sed, o którym więcej nam może powiedzieć man sed ;) - w każdym razie przydaje się ono do wykonywania tego typu zamian. Najpierw mamy znak polecenia s, o którym manpage powie nam: s /wyrażenie regularne/zamiennik/flagi. Jak widać, tutaj użyty jest znak /, wówczas kiedy ja używam | - jest tak dlatego, że zgodnie z manem Zamiast ‘/’ można użyć  dowolnego  znaku., a poza tym pionowa krecha wydaje się być lepszym separatorem kolejnych pól ;) (czasem też używam #).
  • Teraz jest to co najważniejsze, czyli wyrażenie regularne. Tam po prostu wpisuję jak wygląda każda linia tego pliku wpisując \(.*\) w miejsce, gdzie mają być dowolne znaki (czyli zamiast tego ABC, DEF itp.). Te nawiasy są bardzo istotne, gdyż dzięki nim następuje grupowanie wyrazów, czyli można ich potem użyć do zamiany.
  • Następnie mamy to co zamieniamy ;) wszystko powinno tu być jasne, może poza \1 i \0. Są ta najistotniejsze symbole w tej zamianie, gdyż pod nie podstawiane są wartości z tych nawiasów. \1 zawiera to, co było w pierwszym nawiasie, \2 to co w drugim (choć tego nie użyłem), zaś \0 zawiera całość - czyli od początku wyrażenia regularnego do końca.
No i mam nadzieję, że teraz wszystko jest jasne ;)
Paczker i fan Fedory
... moje zapiski...
... i strona na wiki
Avatar
Reply · Quote neo_fox #5 ()
since Jan 2007 · 24 posts
Group memberships: Użytkownicy
Show profile · Link to this post
Quote by ecik:
No i mam nadzieję, że teraz wszystko jest jasne ;)

Jasne :-)
Teraz muszę jeszcze trochę poćwiczyć ;-)

Dzięki
Joomla Yellow Pages Component
Joomla Directory Component
Avatar
Reply · Quote !Ci #6 ()
since Feb 2007 · 15 posts · Location: Rzeszow
Group memberships: Użytkownicy
Show profile · Link to this post
Takie moje male wtracenie zrobie  ;-) Temat jest ciekawie i prosto opisany w ksiazce "Skrypty powloki". Takim "bratem" dla sed'a jest jezyk awk - znajac oba te polecenia mozna wiele zdzialac.
Avatar
Reply · Quote gwiazdor_online #7 ()
User title: taki nieogolony typek
since May 2006 · 247 posts · Location: Skarżysko-Kamienna -> Kraków
Group memberships: Moderatorzy, Użytkownicy, Zespół fedorapl.org
Show profile · Link to this post
A ja właśnie nie wiem dlaczego ludzie sobie ubzdurali, że sed i awk są "braćmi". Te programy realizują zupełnie co innego.

Ja polecam man textutils :)
Nie próbuj dyskutować z debilem. Najpierw sprowadzi cię do swojego poziomu, a następnie pokona doświadczeniem.
Avatar
Reply · Quote !Ci #8 ()
since Feb 2007 · 15 posts · Location: Rzeszow
Group memberships: Użytkownicy
Show profile · Link to this post
Quote by gwiazdor_online:
A ja właśnie nie wiem dlaczego ludzie sobie ubzdurali, że sed i awk są "braćmi". Te programy realizują zupełnie co innego.
Nie wiem nigdy sie nie spotkalem to moja prywatna opinia. I wlasnie dlatego, ze maja rozne funkcje uzupelniaja sie, dzieki temu znajac oba narzedzia mozna uzyskac naprawde ciekawe efekty :-p
Avatar
Reply · Quote neo_fox #9 ()
since Jan 2007 · 24 posts
Group memberships: Użytkownicy
Show profile · Link to this post
Witam ponownie.

Potrzebowałbym znowu pomocy  :blush:
Mam w skrypcie php taki kod:
        $disalowedtags = array("script",
                        "object",
                        "iframe",
                        "image",
                        "applet",
                        "meta",
                        "form",
                        "onmouseover",
                        "onmouseout"
        );
        foreach ($disalowedtags as $tag) {
            if (eregi("<[^>]*".$tag."*\"?[^>]*>", $data)) {
                $data = preg_replace('/<'.$tag.'>([^>]*)<\/'.$tag.'>/i', '' , $data );
            }
        }
W ten sposób mogę usunąć z łańcucha znaków przykładowo:
<script> sendMyCookieGdzieśTam()</script>

Ale w jaki sposób usunąć coś takiego:
<script src="http://brzydkiserwer.com" />

Byłbym baaaaaaaaardzo wdzięczny za pomoc :rolleyes:
Joomla Yellow Pages Component
Joomla Directory Component
Reply to this post:
Verification code: VeriCode Please note the verification code from the picture into the text field next to it.
Reply
Go to forum
Powered by Unclassified NewsBoard (© 2003-7 by Yves Goergen)
Current time: 2012-02-06, 18:55:27 (UTC +01:00)
Copyright © 2006 - 2007 fedorapl.org