BiG_WEaSeL
Elder-
|
also, ich habe folgenden string
das ist ein <a href="http://www.test.at">test</a> blabla
gefunden werden soll mit der funktion preg_match '<a href="http://www.test.at">' im moment schaffe ich es leider nur alles bis inkl </a> zu finden, ich glaube es liegt am (nicht) ecapen mancher zeichen, mein ansatz:
achja, verwendet wird php 4.0.6 und das kann auch nicht geandert werden (sonst gaebe es imho unkompliziertere moeglichkeiten)
$suchstring enthaelt die gesuchte zeichenkette als string
$bla='<a href=.*$suchstring.*"> ';
if(preg_match($bla,$suchhightext,$fehlertreffer))
nur leider springt er immer gleich in den else zweig, obwohl es so laut einem testprogramm für regex funktionieren muessten, deswegen tippe ich ja auf escape-fehler.
waere nett wenn mir jemand helfen koennte.
EDIT: laut manual muesst ich ja irgendwie mit .?U oder so die greediness begrenzen koennen aber ich habs nicht zusammengebracht ;(
Bearbeitet von BiG_WEaSeL am 31.08.2004, 16:29
|
watchout
Legendundead
|
also, ich habe folgenden string
das ist ein <a href="http://www.test.at">test</a> blabla
gefunden werden soll mit der funktion preg_match '<a href="http://www.test.at">' im moment schaffe ich es leider nur alles bis inkl </a> zu finden, ich glaube es liegt am (nicht) ecapen mancher zeichen, mein ansatz:
achja, verwendet wird php 4.0.6 und das kann auch nicht geandert werden (sonst gaebe es imho unkompliziertere moeglichkeiten)
$suchstring enthaelt die gesuchte zeichenkette als string
$bla='<a href=.*$suchstring.*"> ';
if(preg_match($bla,$suchhightext,$fehlertreffer))
nur leider springt er immer gleich in den else zweig, obwohl es so laut einem testprogramm für regex funktionieren muessten, deswegen tippe ich ja auf escape-fehler.
waere nett wenn mir jemand helfen koennte.
EDIT: laut manual muesst ich ja irgendwie mit .?U oder so die greediness begrenzen koennen aber ich habs nicht zusammengebracht ;( hallo! also... ich weiss nicht genau, was du eigentlich genau bezweckst, aber da sind auf jeden fall ein paar denkfehler drin - und ein schreibfehler... quote: $bla=' /<a href= ".* '.$suchstring.* .'"> /U'; fehlt: anführungszeichen, delimiter (/) und in "'"-strings werden keine variablen geparsed, ausserdem wird der pattern glaub ich auch so nix finden... also, ich glaube du suchst nach einem string in einer url, wenn ich das richtig sehe, bzw. in allen links nach einem string: //erstamal suchst du nach dem grundgerüst:
'/<a href=".*">/U'
//jetzt wollen wir das suchwort ham:
'/<a href=".*('.preg_quote($s,'/').').*">/U'
//hast du mehrere suchbegriffe in einem array, machst du es so:
'/<a href=".*('.preg_quote(implode('|',$a_s).'),'/').*">/U'
//ps: sagt aber keiner, dass nicht auch andere attribute,whitespaces, usw. drin sind - aber der pattern muss nicht unbedingt funktionieren (er *sollte* zwar, muss aber nicht - kann atm net testen...):
'/<a.*href=".*('.preg_quote(implode('|',$a_s).'),'/').*".*>/U'
|
dfx
Bloody Newbie
|
GANZ wichtig in diesem fall ist auch, daß der quantifier "*" per default "greedy" ist, d.h. soviele zeichen matcht wie möglich. das ist genau das, was du nicht willst. entweder du sagt dem re-engine, daß du einen nicht-greedy match machen willst, indem du ein "?" hinten dran hängst (also zb /.*?/), oder du gibst das "." etwas genauer an, zb indem du sagst, daß du alles außer anführungszeichen matchen willst (das wäre dann /[^"]*/). du kannst natürlich beides kombinieren (/[^"]*?/).
|
watchout
Legendundead
|
GANZ wichtig in diesem fall ist auch, daß der quantifier "*" per default "greedy" ist, d.h. soviele zeichen matcht wie möglich. das ist genau das, was du nicht willst. entweder du sagt dem re-engine, daß du einen nicht-greedy match machen willst, indem du ein "?" hinten dran hängst (also zb /.*?/), oder du gibst das "." etwas genauer an, zb indem du sagst, daß du alles außer anführungszeichen matchen willst (das wäre dann /[^"]*/). du kannst natürlich beides kombinieren (/[^"]*?/). oder du bist "GANZ" schlau, und gibst den U-Modifier an, welcher den gesamten pattern auf ungreedy stellt - oh, was seh ich denn da bei meinem bespiel...
|
dfx
Bloody Newbie
|
oh, das kannt ich noch nicht. in perl gibt's das nämlich nicht, scheint php-spezifisch zu sein. man lernt nie aus
|
BiG_WEaSeL
Elder-
|
ok, danke, hab jetzt zeit hier wieder zu antworten, wenn ich mir das so anschaue, dann hatte ich es ja fast schon soweit (nicht die version die ich hier gepostet hab (da warn zig fehler drinnen, ich mein, ' parsed keine variablen, das is eh klar, hatte ein brett vorm kopf )) danke watchout fuer deine geduldige hilfe
Bearbeitet von BiG_WEaSeL am 04.09.2004, 10:58
|
watchout
Legendundead
|
ok, danke, hab jetzt zeit hier wieder zu antworten, wenn ich mir das so anschaue, dann hatte ich es ja fast schon soweit (nicht die version die ich hier gepostet hab (da warn zig fehler drinnen, ich mein, ' parsed keine variablen, das is eh klar, hatte ein brett vorm kopf ))
danke watchout fuer deine geduldige hilfe  jo, falls was net funkt -> eh scho wissen
|
BiG_WEaSeL
Elder-
|
jaja, nein, geht eh alles, ich hab wohl nur einen groben denkfehler drinnen gehabt, so eine aehnliche regex hatte ich schon mal, nur anscheinend war im restlichen code auch ein fehler, ich dachte nur dauernd es lag an der regex
|