Wieder mal ein RegEx Problem...

multimolti

Erfahrenes Mitglied
Bitte helft mir, ich komme wieder mal mit Regulären Ausdrücken nicht klar...

Ich habe etwas wie das hier:
Code:
<tag>http://domain.com/folder/blubb/thread/00531b6229e7b2b1/6b93e189aa03ed6e?show_docid=6b93e189aa03ed6e</tag>

Und will daraus den Wert von "show_docid" haben, in diesem Fall "6b93e189aa03ed6e".
Wie mach ich das am besten? Dachte jetzt grade an preg_match, aber damit komm ich wieder mal nicht klar. Bitte helfen!
 
W00t!

Ich habe durch rumprobieren irgendwas rausbekommen, funktioniert sogar. Aber ist das auch gut? Funktioniert in allen Fällen?

PHP:
preg_match("/show_docid=(.*?)\s/i", $content, $result);

Ergebnis:
Code:
Array
(
    [0] => show_docid=6b93e189aa03ed6e

    [1] => 6b93e189aa03ed6e
)
 
Mal wieder ein Laien RegExp, aber es sollte funktionieren...

PHP:
$str = '<tag>http://domain.com/folder/blubb/thread/00531b6229e7b2b1/6b93e189aa03ed6e?show_docid=6b93e189aa03ed6e</tag>';
$rxp = '#<tag>(.*)show_docid=(.*)<\/tag>#';
preg_match($rxp, $str, $match);
echo $match[2];
 
Naja, vielleicht kannst du mir gleich noch mal helfen, jetzt habe ich:

HTML:
<a target="_top" href="/folder/user/attach/6b93e189aa03ed6e/title.xml?part=2">Download</a>
Und würde gern die ganze URL haben. Habe versucht, mir das selbst zu basteln, aber kommt irgendwie nix.

EDIT:
So ein Blödsinn, waren Prozentzeichen drin, daher hat das RegEx das nicht gepackt. Jetzt gehts.
 
Zuletzt bearbeitet:
Hi,

das funktioniert aber nur, wenn hinter show_docid nicht noch weitere URL-Parameter oder ein Anker stehen.

Kleine Verbesserung:

PHP:
$pattern = '/<tag>(.*)show_docid=([^#^&]*)<\/tag>/iU';

LG
 
Es gibt da auch die recht nützlichen Funktionen parse_url() und parse_str() mit denen sich u.U. genauer arbeiten lässt:
Code:
<pre><?php
$str='<tag>http://domain.com/folder/blubb/thread/00531b6229e7b2b1/6b93e189aa03ed6e?show_docid=6b93e189aa03ed6e</tag>';
preg_match('|<tag>([^<]*)</tag>|',$str,$match);
$url=parse_url($match[0]);
parse_str($url['query'],$query);
print_r($query)
?>


Ergibt:
Code:
Array
(
    [show_docid] => 6b93e189aa03ed6e
)
 
Wenn nur Hexadezimalzeichen erlaubt sind, ist auch Folgendes möglich:
Code:
show_docid=([0-9a-f]+)
 
Zurück