Gå til innhold

RegEx bug, preg_match_all macther ikke og outputter ikke


Anbefalte innlegg

Hei, Har et problem med en kode her, får ikke mitt RegEx til å virke tilstrekkelig når det er i bruk spesielle tegn som "=" og "<" og det fungerer ikke å putte \ forran de.

 

$source = "Randomtext<a href=\"test.php\">some text</a>rtext";
preg_match_all("/<a href=/", $source, $out);

echo var_dump($out);

 

Output =

array(1) { [0]=> array(1) { [0]=> string(8) "

 

og hvis jeg endrer "/<a href=/" til "/a href/" blir dette output:

 

array(1) { [0]=> array(1) { [0]=> string(6) "a href" } }

 

Hva skal jeg gjøre? o_O

Lenke til kommentar
Videoannonse
Annonse

Ja har sjekket i nettleser, vet dette fungerte før da jeg har brukt det før og baserer den nye koden på en eldre kode jeg har skrevet som fungerte glimrende i sin tid. Men siden jeg bruker den mot har endret system og jeg må rekode det.

 

< og = er ikke regnet som spesialtegn, for å teste teorien kan du teste den på http://regjex.com/ der fungerer alt ved stringen min, men ikke når jeg kjører det gjennom php her og aner ikke hvorfor.

 

Ja har prøvd å escape disse tegnene men det hjelper ikke.

Lenke til kommentar

< og = er ikke regnet som spesialtegn, for å teste teorien kan du teste den på http://regjex.com/ der fungerer alt ved stringen min, men ikke når jeg kjører det gjennom php her og aner ikke hvorfor.

 

Ja har prøvd å escape disse tegnene men det hjelper ikke.

Nei, det kan nok godt hende det ikke er nødvendig når de ikke bruker i rett kontekst, men at de ikke er spesialtegn er sludder og vås. Noen gang hørt om «assertions» når det kommer til regulære uttrykk? F.eks. er «lookbehind assertion» ?<=

preg_match("/(?<=foo)bar/", "foobar", $out);
var_dump($out);

Ergo, det er spesialtegn ;)

Lenke til kommentar

joa, men mente det ikke var nødvendig. Uansett det løser ikke problemet mitt og jeg skjønner faen ikke hva som er bugga med php her :S Noen som har en anelse?

Det spørs jo hva du forventer da. Koden i første post gir hos meg:

array(1) {
 [0]=>
 array(1) {
[0]=>
string(8) "<a href="
 }
}

Lenke til kommentar

Det fungerer jo helt fint sånn jeg ser det. Det som skjer er jo at når du viser dette i en nettleser (som antagelig HTML) så åpner du en a-tag uten å lukke den. Ergo vil jo mye rart skje.

 

… men prøv dette da:

$source = "Randomtext<a href=\"test.php\">some text</a>rtext";
preg_match_all("/<a href=/", $source, $out);
echo "<pre>";
var_dump($out);
echo "</pre>";

Endret av Ernie
Lenke til kommentar

Det er ikke nok med pre tagger rundt, <a href= vil fortsatt bli oppfattet som html og dermed ikke vist. Sjekk kildekoden i nettleseren (høyre klikk -> view source) eller

$source = "Randomtext<a href=\"test.php\">some text</a>rtext";
preg_match_all("/<a href=/", $source, $out);

echo htmlentities($out[0][0]); // <a href=

for å skrive ut $out[0][0] i "ikke html"

Endret av Crowly
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...