Anzeige - [Interessiert an einer Anzeige?]
(?) Tags raten (?) auslesen, preg, regexps, text, urls (edit)
 
Reply to this topicStart new topicStart Poll
> urls aus text auslesen
pangu
Geschrieben am: Fr 16.09.2005, 14:19
Report PostQuote Post

AyomRank 6
************

Gruppe: Member (aktiv)
Beiträge: 826
Mitglied seit: 29.07.2005


nehmen wir an, ich habe folgenden Beispieltext:
QUOTE

dies ist ein beispieltext http://www.xyz.ch mit ganz vielen verschiedenen links, zb: <a href="http://www.de">www.ch</a> sdfgsdfgsdfgsdfg dfgdfg dfgdfg


wie kann ich jetzt daraus die urls auslesen, dass ich folgenden neuen text erhalte:
QUOTE

<a href="http://www.xyz.ch>http://www.xyz.ch</a>
<a href="http://www.de">www.ch</a>


..also anklickbare Links OHNE den Text?
thx

mein bisheriger ansatz:
CODE

$urlsuch[]="/([^]_a-z0-9-=\"'\/])((https?|ftp):\/\/|www\.)([^ \r\n\(\)\^\$!`\"'\|\[\]\{\}<>]*)/si";
$urlsuch[]="/^((https?|ftp):\/\/|www\.)([^ \r\n\(\)\^\$!`\"'\|\[\]\{\}<>]*)/si";

$urlreplace[]="\\1\\2\\4";
$urlreplace[]="\\1\\3";

$text = preg_replace($urlsuch, $urlreplace, $text);

$text = preg_replace("/\[URL\]www.(.*?)\[\/URL\]/si", "<a target=\"_blank\" href=\"http://www.\\1\">www.\\1</a>", $text);

$text = preg_replace("/\[URL\](.*?)\[\/URL\]/si", "<a target=\"_blank\" href=\"\\1\">\\1</a>", $text);


-> wie kann ich jetzt noch den restlichen text entfernen? (das also NUR die anklickbaren urls übrigbleiben?)

geht das mit preg_match_all?


--------------------
Jonglieren lernen nette Community rund ums Jonglieren °°°
Top
PMEmail PosterUsers WebsiteICQ
Top
 
 
Sascha Ahlers
#2 Geschrieben am: Fr 16.09.2005, 15:31 (+01:11)
Report PostQuote Post

AyomRank 8
Group Icon

Gruppe: Experten Entwicklung
Beiträge: 1697
Mitglied seit: 27.12.2004


Hallo.

CODE
preg_match_all('/\<a(.*?)href=[\'"]((http|ftp)s?\:\/\/[^\/ ]*(\/[a-z0-9\/\-\._\%;,\?&\+\[\]\=]*)?)[\'"](.*?)\>(.*?)\<\/a\>/im', $eingabe, $ausgabe, PREG_SET_ORDER);

for( $i = 0; $i < count($ausgabe); $i++ ) {
  echo 'URI: ' . $ausgabe[$i][2] . '<br />';
  echo 'Linktext: ' . $ausgabe[$i][6] . '<br /><br />';
}


Dieser Code sollte alle festen Links innerhalb des href-Attribute von den Link-Tags finden. Gegebenfalls muss noch der Ausdruck innerhalb des "href" Attributes etwas angepasst werden. Ich habe bei den Domainnamen ganz bewusst [^\/]* als Ausdruck verwendet, um auch Domains nach den IDNA [1] Standard zu finden. Punycode [2] zu kontrollieren ist etwas umständlicher, doch kannst Du innerhalb der for-Schleife jeden Link nochmals kontrollieren.
Dieser Ansatz geht jedoch davon aus, dass feste Links verwendet werden mit Servernamen usw. Wenn das Script auch direkt kontrollieren soll, ob die URL auch richtig gequotet wurde, dann muss Du das ganze zweimal durchlaufen lassen und die beiden Stellen mit [\'"] durch \' bzw. " ersetzen.
Vielleicht muss der Ausdruck noch angepasst werden, da ich nicht auf jedes Zeichen innerhalb einer URI geachtet habe, da dies etwas mehr Zeit in Anspruch nimmt.



MfG Sascha Ahlers

Bearbeitet von Sascha Ahlers am Mo 19.09.2005, 16:15


--------------------
Joseph Joubert: "Der Verstand kann uns sagen, was wir unterlassen sollen. - Aber das Herz kann uns sagen, was wir tun müssen."

Sicherheit beim Programmieren: Top 10 application vulnerabilities in 2007
Top
PMEmail PosterUsers WebsiteICQ
Top
 
pangu
#3 Geschrieben am: Fr 16.09.2005, 16:04 (+00:33)
Report PostQuote Post

AyomRank 6
************

Gruppe: Member (aktiv)
Beiträge: 826
Mitglied seit: 29.07.2005


yep, das scheint zu klappen. vielen dank! smile.gif


--------------------
Jonglieren lernen nette Community rund ums Jonglieren °°°
Top
PMEmail PosterUsers WebsiteICQ
Top
 
Sascha Ahlers
#4 Geschrieben am: Fr 16.09.2005, 18:04 (+02:00)
Report PostQuote Post

AyomRank 8
Group Icon

Gruppe: Experten Entwicklung
Beiträge: 1697
Mitglied seit: 27.12.2004


Ich habe den Code gerade nochmal etwas bearbeitet, da ich das Gleichheitszeichen in dem Regulären Ausdruck vergessen habe, was doch noch sehr wichtig ist bei einer URI...


MfG Sascha Ahlers


--------------------
Joseph Joubert: "Der Verstand kann uns sagen, was wir unterlassen sollen. - Aber das Herz kann uns sagen, was wir tun müssen."

Sicherheit beim Programmieren: Top 10 application vulnerabilities in 2007
Top
PMEmail PosterUsers WebsiteICQ
Top
 
pangu
#5 Geschrieben am: Fr 16.09.2005, 20:10 (+02:05)
Report PostQuote Post

AyomRank 6
************

Gruppe: Member (aktiv)
Beiträge: 826
Mitglied seit: 29.07.2005


hab gerade gesehen, das links der form: http://www.weltkarten-landkarten.de/landka...a/d_default.asp nicht erkannt werden, nur: http://www.weltkarten-landkarten.de ..
-> woran liegt das?


--------------------
Jonglieren lernen nette Community rund ums Jonglieren °°°
Top
PMEmail PosterUsers WebsiteICQ
Top
 
Sascha Ahlers
#6 Geschrieben am: Fr 16.09.2005, 20:26 (+00:16)
Report PostQuote Post

AyomRank 8
Group Icon

Gruppe: Experten Entwicklung
Beiträge: 1697
Mitglied seit: 27.12.2004


QUOTE (pangu @ Fr 16.9.2005, 21:10)
[...]
-> woran liegt das?

Da habe ich halt zwei Zeichen vergessen, ich habe das nochmal kurz nachgebesser, auch im oberen Code.
Hier nochmal rot hervorgehoben, welche Zeichen ich hinzugefügt habe (das sind halt Flüchtigkeitsfehler, darum soll man ja auch Software vorher gründlich testen).

QUOTE
preg_match_all('/\<a(.*?)href=[\'"]((http|ftp)s?\:\/\/[^\/]*(\/[a-z0-9\/\-\._\%;,\?&\+\[\]\=]*)?)[\'"](.*?)\>(.*?)\<\/a\>/im', $eingabe, $ausgabe, PREG_SET_ORDER);



MfG Sascha Ahlers


--------------------
Joseph Joubert: "Der Verstand kann uns sagen, was wir unterlassen sollen. - Aber das Herz kann uns sagen, was wir tun müssen."

Sicherheit beim Programmieren: Top 10 application vulnerabilities in 2007
Top
PMEmail PosterUsers WebsiteICQ
Top
 
pangu
#7 Geschrieben am: Fr 16.09.2005, 20:34 (+00:08)
Report PostQuote Post

AyomRank 6
************

Gruppe: Member (aktiv)
Beiträge: 826
Mitglied seit: 29.07.2005


thx, will das auch besser lernen: kennst du eine seite wo man reguläre expressions gut lernen kann?


--------------------
Jonglieren lernen nette Community rund ums Jonglieren °°°
Top
PMEmail PosterUsers WebsiteICQ
Top
 
Sascha Ahlers
#8 Geschrieben am: Fr 16.09.2005, 20:46 (+00:11)
Report PostQuote Post

AyomRank 8
Group Icon

Gruppe: Experten Entwicklung
Beiträge: 1697
Mitglied seit: 27.12.2004


QUOTE (pangu @ Fr 16.9.2005, 21:34)
thx, will das auch besser lernen: kennst du eine seite wo man reguläre expressions gut lernen kann?

Klar kenne ich dazu Links:
Die Wikipedia Links sind meistens auch sehr gut ;-)



MfG Sascha Ahlers


--------------------
Joseph Joubert: "Der Verstand kann uns sagen, was wir unterlassen sollen. - Aber das Herz kann uns sagen, was wir tun müssen."

Sicherheit beim Programmieren: Top 10 application vulnerabilities in 2007
Top
PMEmail PosterUsers WebsiteICQ
Top
 
Sascha Ahlers
#9 Geschrieben am: Mo 19.09.2005, 16:19 (+2d 19:33)
Report PostQuote Post

AyomRank 8
Group Icon

Gruppe: Experten Entwicklung
Beiträge: 1697
Mitglied seit: 27.12.2004


QUOTE (freakx0 @ Mo 19.9.2005, 17:07)
[...]<a href="http://www.link.de" title="textirgendwas">lllllink</a>

kannst du das Problem entdecken bzw. dein ansonsten sehr guter regulärer Ausdruck.
[...]

Hier nochmal eine Verbesserung, das ensprechende Zeichen kann ich leider nicht markieren, da ich ein Leerzeichen hinzugefügt habe, dafür habe ich den Teilbereich markiert, welcher sich verändert hat:

QUOTE
preg_match_all('/\<a(.*?)href=[\'"]((http|ftp)s?\:\/\/[^\/ ]*(\/[a-z0-9\/\-\._\%;,\?&\+\[\]\=]*)?)[\'"](.*?)\>(.*?)\<\/a\>/im', $eingabe, $ausgabe, PREG_SET_ORDER);


Leerzeichen gehören halt nicht in einen Link ;-)
Obwohl ich habe noch nie versucht einen Link in der Form zu schreiben:

HTML
<a href=" http://www.domain.tld/ ">Mein Link</a>



MfG Sascha Ahlers


--------------------
Joseph Joubert: "Der Verstand kann uns sagen, was wir unterlassen sollen. - Aber das Herz kann uns sagen, was wir tun müssen."

Sicherheit beim Programmieren: Top 10 application vulnerabilities in 2007
Top
PMEmail PosterUsers WebsiteICQ
Top
 
Sascha Ahlers
#10 Geschrieben am: Mo 19.09.2005, 17:41 (+01:21)
Report PostQuote Post

AyomRank 8
Group Icon

Gruppe: Experten Entwicklung
Beiträge: 1697
Mitglied seit: 27.12.2004


QUOTE (freakx0 @ Mo 19.9.2005, 17:23)
[...]
naja, so war ja mein Link nicht ;-) war halt noch der title= dabei.
[...]

Ne, dieses Beispiel war nun etwas anderes gemeint, ob ein Browser diesen Link überhaupt richtig darstellt, na ja, ich kann es gleich mal ausprobieren. Natürlich funktioniert der Reguläre Ausdruck bei einer solchen Schreibweise nicht.

Das mit dem Problem bei den Title-Attribute habe ich mit bei der oben markierten Änderung behoben.


<edit>
Der oben genannte Link funktioniert zumindestens in Opera 8.01 und Firefox 1.0.4 ggf. müsste der Ausdruck dann halt wieder entsprechend angepass werden mit zwei \s* und weiter getestet werden, oder gleich innerhalb der href nur noch den Ausdruck als [^'"]* darstellen und diesen dann im zweiten Schritt überprüfen.
</edit>



MfG Sascha Ahlers

Bearbeitet von Sascha Ahlers am Mo 19.09.2005, 17:46


--------------------
Joseph Joubert: "Der Verstand kann uns sagen, was wir unterlassen sollen. - Aber das Herz kann uns sagen, was wir tun müssen."

Sicherheit beim Programmieren: Top 10 application vulnerabilities in 2007
Top
PMEmail PosterUsers WebsiteICQ
Top
 
SwiZZ
#11 Geschrieben am: Di 20.09.2005, 09:15 (+15:33)
Report PostQuote Post

AyomRank 5
Group Icon

Gruppe: Experten Entwicklung
Beiträge: 247
Mitglied seit: 8.11.2004


Falls jemmand in regular expresions interessiert ist.
http://www.regularexpressions.info/ <- kann ich nur empfehlen

Die regexp buddy finde ich auch noch genial...

Gruss
Steven


--------------------
"I said it was an upgrade. I didn't say it was better."
Top
PMUsers Website
Top
 
Sascha Ahlers
#12 Geschrieben am: Di 20.09.2005, 09:35 (+00:19)
Report PostQuote Post

AyomRank 8
Group Icon

Gruppe: Experten Entwicklung
Beiträge: 1697
Mitglied seit: 27.12.2004


QUOTE (SwiZZ @ Di 20.9.2005, 10:15)
[...]
http://www.regularexpressions.info/ <- kann ich nur empfehlen
[...]

Habe ich doch drauf verwiesen, nicht direkt, aber bei Wikipedia ist der Link mit vorhanden ;-)


MfG Sascha Ahlers


--------------------
Joseph Joubert: "Der Verstand kann uns sagen, was wir unterlassen sollen. - Aber das Herz kann uns sagen, was wir tun müssen."

Sicherheit beim Programmieren: Top 10 application vulnerabilities in 2007
Top
PMEmail PosterUsers WebsiteICQ
Top
5 Monate später...
cosmo-k
#13 Geschrieben am: Do 9.02.2006, 22:48 (+5m )
Report PostQuote Post

AyomRank 1
**

Gruppe: Member (inaktiv)
Beiträge: 1
Mitglied seit: 9.02.2006


Danke, das Thema hat mir wirklich sehr weitergeholfen, aber leider habe ich noch ein Problem. Ich weiß nicht wie ich das jetzt von einer URL auslesen kann...

Ich dachte mir das Ganze so, aber klappt nicht so richtig (Warning: preg_match_all() expects parameter 2 to be string, resource given in "der preg_match_all Zeile"):


$eingabe = fopen($url,"r");

preg_match_all('/\<a(.*?)href=[\'"]((http|ftp)s?\:\/\/[^\/ ]*(\/[a-z0-9\/\-\._\%;,\?&\+\[\]\=]*)?)[\'"](.*?)\>(.*?)\<\/a\>/im', $eingabe, $ausgabe, PREG_SET_ORDER);

for( $i = 0; $i < count($ausgabe); $i++ ) {
echo 'URI: ' . $ausgabe[$i][2] . '<br />';
echo 'Linktext: ' . $ausgabe[$i][6] . '<br /><br />';
}
Top
PMEmail Poster
Top
1 Jahr und 9 Monate später...
foers
#14 Geschrieben am: Sa 10.11.2007, 14:18 (+1y 9m )
Report PostQuote Post

AyomRank 1
**

Gruppe: Member (inaktiv)
Beiträge: 1
Mitglied seit: 10.11.2007


Hallo zusammen,

obwohl ich viel mit diesem Thread gelernt und gearbeitet habe komme ich doch nicht so recht weiter und würde daher gerne meine Frage mit anhängen.

Auch ich möchte URLs aus einem Text auslesen lassen und benötige eigentlich einen einfacheren Pattern da meine URLs einen festen Aufbau haben. Dies bekomme ich aber nicht hin. Zur Vereinfachung führe ich mal drei URLs wie Sie bei mir im Text vorkommen an:

1) http://www.allgemeines.info/aktiv.php?doma...e.vu&code=7114d

2) http://besonderes.com/aktiv.php?domain=blo...n.at&code=6654a

3) http://www.spezielles.de/aktiv.php?domain=....com&code=de44s


Somit haben meine URLs folgenden Aufbau:

http://(www)name.tld/aktiv.php?domain=IRGENDWAS1&code=IRGENDWAS2

Ich könnte also auf den umständlichen <a>-Tag-Abgleich verzichten und gleich mit http:// den Pattern beginnen. Wie schaffe ich das?

Viele Grüsse und vielen Dank,
Björn


Top
PMEmail Poster
Top
5 Monate später...
halbesbit
#15 Geschrieben am: Sa 12.04.2008, 23:31 (+5m )
Report PostQuote Post

AyomRank 3
******

Gruppe: Member (inaktiv)
Beiträge: 38
Mitglied seit: 12.04.2008


<?php
error_reporting(E_ALL);

// Text bzw. String mit file_get_contents() holen
// andere Möglichkeit wäre mit fopen() oder CURL
$string = file_get_contents('http://www.ayom.de');

// das Suchmuster mit Delimiter und Modifer (falls vorhanden)
$pattern = '!<a.*href\="?(\S+)"([^>]*)>.+</a>!im';

// RegEx mit preg_match_all() auswerten
preg_match_all($pattern, $string, $array, PREG_OFFSET_CAPTURE);

// formatierte Ausgabe
echo '<pre>', print_r($array, true), '</pre>';

?>
http://www.regex-tester.de/regex.html cool.gif
Grüsse halbesbit wink.gif


--------------------
Top
PMEmail PosterUsers Website
Top
 
Thema wird von 0 Benutzer(n) gelesen (0 Gäste und 0 anonyme Benutzer)
0 Mitglieder:
Trackback-Url: http://www.ayom.com/track/t/8381

Topic Options Reply to this topicStart new topicStart Poll

 


> Ähnliche Themen
Ms dos Datei in Text-Datei umwandeln sylvia73 57 3 Mi 2.07.2008, 15:44
[B] Text zum Thema: Umwelt, Klima u. Klimawandel Schwede 44 0 Di 1.07.2008, 10:15
Brauche ich so einen Text (Markenschutz)? alex72 135 2 Mi 25.06.2008, 18:53
(B) Text zum Thema "Altersvorsorge/Rente" tune 114 0 Sa 21.06.2008, 10:50
[b] aktuellen text über Immobilienkredite botschek 83 0 Fr 20.06.2008, 10:17
[SQL] Eine Spalte mit einem Text füllen woody 114 2 So 15.06.2008, 21:58
[PHP] Text vernünftig formatieren TTlong 118 2 Di 10.06.2008, 20:37
Erstelle Text-Content für Erotikseiten Max61 78 0 Di 10.06.2008, 16:51
Wörter aus Text in Links umwandeln halbesbit 92 0 Di 3.06.2008, 04:09
Forumlare auslesen mit enctype="text/plain" spaceman007 219 1 Mi 28.05.2008, 21:23




Anzeige - [Interessiert an einer Anzeige?]



Anzeigen




cyon Webhosting



[Interessiert an einer Anzeige?]