Archiv verlassen und diese Seite im Standarddesign anzeigen : java regexp
will so ne art proxy bauen
der browser schickt den reqest jetzt an den proxy und ich hab dann folgenden bsp string
GET http://www.heise.de/newsticker HTTP/1.1 Host: www.heise.de User-Agent: Links (0.98; Linux 2.4.20 i686; 80x24) Accept: */* Accept-Charset: us-ascii, ISO-8859-1, ISO-8859-2, ISO-8859-4, ISO-8895-5, ISO-88 59-7, ISO-8895-9, ISO-8859-13, ISO-8859-15, ISO-8859-16, windows-1250, windows-1 251, windows-1257, cp437, cp737, cp850, cp852, cp866, x-cp866-u, x-mac, x-mac-ce , x-kam-cs, koi8-r, koi8-u, TCVN-5712, VISCII, utf-8 Proxy-Connection: Keep-Alive
jetzt will ich irgendwie das was hinter
Host: steht zurück kriegen um dann einen socket zu dem webserver aufmachen zu können,
wie stell ich das am besten an mit java oder wäre es hier sinnvoll
auf das gute alte perl zurück zugreifen
peschmae
17-05-2003, 08:44
ab java 1.4 gibts eine regexp - api, für vorher musst du das mit "String.indexOf()" (leider nur case-dependent) zu lösen versuchen
für die Regexp - Api etwa so (compiliertes Pattern kann wiederverwendet werden, ungetestet)
import java.util.regex.*;
Pattern p = Pattern.compile("host:(.*)User-Agent");
String s = p.matcher("GET http://www.heise.de/newsticker HTTP/1.1 Host: www.heise.de User-Agent: Links (0.98; Linux 2.4.20 i686; 80x24) Accept: */* Accept-Charset: us-ascii, ISO-8859-1, ISO-8859-2, ISO-8859-4, ISO-8895-5, ISO-88 59-7, ISO-8895-9, ISO-8859-13, ISO-8859-15, ISO-8859-16, windows-1250, windows-1 251, windows-1257, cp437, cp737, cp850, cp852, cp866, x-cp866-u, x-mac, x-mac-ce , x-kam-cs, koi8-r, koi8-u, TCVN-5712, VISCII, utf-8 Proxy-Connection: Keep-Alive");
MfG Peschmä
nur leider ist der return wert der matcher methode nicht vom typ String
ich muss das irgendwie anders machen
danke für deine hilfe
versuch es mal so:
String in = "yyyyyyyyyyy Host: www.abc.de yyyyyyyyyyyy";
Pattern p = Pattern.compile(".*Host: *([^ ]*).*");
Matcher m = p.matcher(in);
if (m.find()==true)
System.out.println(in.substring(m.start(1),m.end(1 )));
gruss
Arthur
vielen dank arthur, das funktioniert zu 100% !
java und regexp find ich zurzeit noch recht komisch, mal sehen ob wir noch freunde werden :)
da lob ich mir doch sed oder perl
peschmae
17-05-2003, 19:01
da ist wohl was auf dem Weg von Kopf zum Forum verloren gegangen (hattes nämlich noch extra nachgeschaut) :p
sollte so heissen:
import java.util.regex.*;
Pattern p = Pattern.compile("host.*)User-Agent");
Strings = p.matcher("GET http://www.heise.de/newsticker HTTP/1.1 Host: www.heise.de User-Agent: Links (0.98; Linux 2.4.20 i686; 80x24) Accept: */* Accept-Charset: us-ascii, ISO-8859-1, ISO-8859-2, ISO-8859-4, ISO-8895-5, ISO-88 59-7, ISO-8895-9, ISO-8859-13, ISO-8859-15, ISO-8859-16, windows-1250, windows-1 251, windows-1257, cp437, cp737, cp850, cp852, cp866, x-cp866-u, x-mac, x-mac-ce , x-kam-cs, koi8-r, koi8-u, TCVN-5712, VISCII, utf-8 Proxy-Connection: Keep-Alive").group(1);
vielleicht auch .group(0) (ausprobieren ;-))
d.h. bei Arthurs Code kannst du die letzten drei Zeilen durch
System.out.println(p.matcher(in).group(1));
ersetzen.
MfG Peschmä
P.S. @arthur: Wieso eigentlich (...==true), das Zeugs ist doch schon boolean, da
P.S. 2 da ich GCJ auch verwende, habe ich bisher auf die Regexp - API verzichtet
@peschmae:
1)einfach nur der lesbarkeit wegen (kommt bei mir von c++ coden)
2)die von dir vorgeschlagene änderung funktioniert aber so nicht.
(das mit group habe ich übersehen :rolleyes: )
deswegen hier noch die gekürzte form:
if (m.find())
System.out.println(m.group(1));
gruss
Arthur
peschmae
18-05-2003, 08:38
okok, das find muss noch hin, das hatte ich übersehen... :D
MfG Peschmä
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.