Jak wydobyć frazę między dwoma wyrazami?

0

Mam takie coś: href="http://forum.4programmert"
Jak przy użyciu klasy TRegExpr wydobyć z tego link?

0

spróbuj z takim wyrażeniem: href="(.*)"

0

Sorki. Nie wiem dlaczego pojawił się login Mały samiec. Tu Xenix33.

Tak, ale jakiej funkcji użyć? Zaczynam dopiero naukę w regexach. Właściwie do parsowania stron potrzebne są mi tylko dwie funkcje: split i ta. Pierwszą już znam.

0

Boś się pewnie wylogował albo sesja wygasła. Ale Janek, odoisałem Tobie. a maila. Dostałeś ode mnie namiary na TRegExpr. Jest tam dokumentacja i przykłady. Do tego masz pluginy do Kodi ode mnie, nieważne że to Pythom, zasada expressionów jest taka sama. Popatrzeć i pokombinować. Umiesz ogarnąć YT po zmianach, ogarnałeś lepiej tokeny na videostarze, dzięki temu ja też się czegoś od Ciebie nauczyłem. A poddajesz się na świetnie udokumentowanhm i rozpracowanym także po polsku temacie? No kamon, ne o take polske wlalczylem jak mawial bolek ;) Dasz rade, tylko pokombinuj troche sam. Już dostałeś odpowiedź, ale sam byś to ogarnął dawno sto razy, nie czekając na pomoc z źadnego forum.

0

Dzięki Olesio. Potrzebuję tylko tej funkcji. A resztę regexów mam gdzieś. To jest przydatne tylko , gdy ktoś wydobywa dane z jakiejś dużej bazy danych lub z niesformatowanego dużego tekstu. Do parsowania stron potrzebne są tylko 3 funkcje. split, ta o tórą pytam i replace. To wszystko. Pierwszą i trzecią znam.
Świetne to forum. Po 1 minucie dostaję odpowiedź na moje pytanie. Może pytania są głupie, ale mam to gdzieś.
"Kto pyta, nie błądzi." Nie znam człowieka, który by znał wszystkie funkcje jakiegoś języka. W samym c++ Builder 6 jest ich tysiące + WinApi, Asm, itd. W Delphi pewnie też. Googlując można coś znaleźć, ale nie ma to, jak bespośrednie pytanie do kogoś, kto akurat się na tym zna.

1

To jest przydatne tylko , gdy ktoś wydobywa dane z jakiejś dużej bazy danych lub z niesformatowanego dużego tekstu.

Niekoniecznie - wyrażenia regularne są po prostu wygodne w obsłudze, przy jednoczesnie dużej funkcjonalności; Jeden mechanizm możliwy do zastosowania w nieskończonej licznie przypadków (ciągów wejściowych i wzorców);

Mimo wszystko każde wyrażenie regularne da się zastąpić dedykowanym lub mniej uniwersalnym własnym kodem; O ile wadą jest mniej uniwersalny mechanizm, to dobrze napisany dedykowany kod może być szybszy od regexów nawet setki razy; Kluczowy jest wybór na podstawie priorytetów - albo stawiamy na wygodę implementacji, albo na efektywność.

0

Dzięki za wykłady. Ja tylko chciałem, aby mi ktoś podał coś takiego (do wiadomości innych poszukujących odpowiedzi na ten temat):

var
  RegExp: TRegExpr;
  s: string;
begin
   RegExp := TRegExpr.Create;
  RegExp.Expression := 'href="(.*?)"';
  if RegExp.Exec(s) then
  begin
    s := RegExp.Match[1];
  end;
    RegExp.Free;
end;

Ale ja dalej uważam, że nie ma to jak Copy,Pos i Delete.
Pozdrawiam.

0

Ale ja dalej uważam, że nie ma to jak Copy,Pos i Delete.

To zależy.

Czasem wystarczą proste operacje na stringach i nie ma potrzeby używać wyrażeń regularnych.
Czasem proste operacje nie wystarczą i wyrażenia regularne pasują jak ulał.
A czasem wyrażenia regularne to za mało i trzeba użyć wyspecjalizowanego parsera (np. do analizy kodu HTML lepiej użyć parsera HTMLa niż tworzyć wymyślne (i nieodporne na przypadki brzegowe) wyrażenia regularne...)

To nie jest kwestia gustu ("nie ma to jak X"), tylko tego, co najlepiej rozwiąże dany problem w danym kontekście (a czasem trzeba użyć nawet gorszego rozwiązania ze względu na to, że to lepsze może być mniej wydajne albo bardziej kłopotliwe w implementacji).

0

A co z wyrażeniem ' href="(.*?),' ? Przecinek nie przechodzi.

0
xenix33 napisał(a):

Dzięki za wykłady. Ja tylko chciałem, aby mi ktoś podał coś takiego (do wiadomości innych poszukujących odpowiedzi na ten temat):

var
  RegExp: TRegExpr;
  s: string;
begin
  RegExp := TRegExpr.Create;
  try
    RegExp.Expression := 'href="(.*?)"';
    if RegExp.Exec(s) then
      s := RegExp.Match[1];
  finally
    RegExp.Free;
  end;
end;

Ale ja dalej uważam, że nie ma to jak Copy,Pos i Delete.
Pozdrawiam.

Taka drobna zmiana optymalizacyjna ;)

0
xenix33 napisał(a):

Dzięki za wykłady. Ja tylko chciałem, aby mi ktoś podał coś takiego (do wiadomości innych poszukujących odpowiedzi na ten temat):

Proszę bardzo. Ale przecież ten kod dostałeś ode mnie w e-mailu, miałeś u mnie w źródłach, to samo w skryptach *.py do KODI, dlatego nie wiem w czym problem. Pomijając to, niemal identyczny kod jest w demach do modułu.

xenix33 napisał(a):

Ale ja dalej uważam, że nie ma to jak Copy,Pos i Delete.

Rób jak chcesz. Nieraz się to przydaje, ale bez przesady. Kiedy rzeźbimy pod VLC/LCL to po co się ograniczać i sobie utrudniać. Owszem, można robić wszystko - nawet tak "profesjonalnie" jak Twoja metoda Zamien_Na_Duze co Ci się ostała w kodzie wyslanym do mnie i ponoć już jej nie używasz, bo tam faktycznie nie użyłeś. Pewnie, lećmy pętlą po każdym znaku i róbmy dla niego upcase. A chusteczka z tym, że od zarania dziejów jest AnsiLower/UpperCase wspierające znaki narodowe i o wiele szybsze.

Wiadomo, można rzeźbić exeki od 0 pod HexEdytorem opcodami mozolnie 10 lat z instrukcjami na przykład opcodów do X86 w ASMie. Da się? No pewnie. Ale po co, chyba że ktoś jest masochistą, ale to trzeba wtedy raczej leczyć, mimo iż Świat widział już wiele. Wszystko jest dla ludzi, tylko bez przesady ;)

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