Toon posts:

[php] Stukje uit string halen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik zit met een voor jullie miscchien klein maar voor mij heel groot probleem(pje).
Ik ben nu echt al een uur op zoek maar kom er nog steeds niet uit.

ik heb deze string:

code:
1
<Veryfies><Verify><Status>Yes</Status><URL></URL><AccountID>117</AccountID></Verify></Veryfies>


Ik wil hier het stukje Yes en 117 apart uitkrijgen, maar hoe??

Ik heb wel zo'n vermoeden dat et niet zo moeilijk is maar probeer jij dat maar es te vinden als je geeneens weet hoe zoiets mag heten, laat staan welke functie je moet gebruiken!

Dus kunnen jullie maybe helpen?? (of anders een tip geven over hoe ik zoiets wel kan vinden?)

  • PrinsEdje80
  • Registratie: Oktober 2001
  • Laatst online: 01-01 15:26

PrinsEdje80

Holographic, not grated...

PHP:
1
list($booleantje, $nummer) = sscanf($string, "<Veryfies><Verify><Status>%s</Status><URL></URL><AccountID>%d</AccountID></Verify></Veryfies>");


Dit is een optie. Het zou netter kunnen lijkt me, maar hoe? Denk dat er mensen met veel meer expertise zijn....

[ Voor 0% gewijzigd door PrinsEdje80 op 26-08-2002 23:42 . Reden: langer verhaaltje ]

Used to be Down Under... Foto gallery


Verwijderd

ik eb daar niet veel verstand van maar wel van html,ik zie wel dat de yes en de 117 niet tussen <> staat

Verwijderd

Topicstarter
PrinsEdje80 schreef op 26 augustus 2002 @ 23:41:
PHP:
1
list($booleantje, $nummer) = sscanf($string, "<Veryfies><Verify><Status>%s</Status><URL></URL><AccountID>%d</AccountID></Verify></Veryfies>");


Dit is een optie. Het zou netter kunnen lijkt me, maar hoe? Denk dat er mensen met veel meer expertise zijn....
daar komt dit uit (als $boleantje)

code:
1
Yes</Status><URL></URL><AccountID>117</AccountID></Verify></Veryfies>

Verwijderd

Topicstarter
Verwijderd schreef op 26 augustus 2002 @ 23:43:
ik eb daar niet veel verstand van maar wel van html,ik zie wel dat de yes en de 117 niet tussen <> staat
dus?

  • PrinsEdje80
  • Registratie: Oktober 2001
  • Laatst online: 01-01 15:26

PrinsEdje80

Holographic, not grated...

Verwijderd schreef op 26 augustus 2002 @ 23:45:
[...]


daar komt dit uit

code:
1
Yes</Status><URL></URL><AccountID>117</AccountID></Verify></Veryfies>
Snap het. Dan haalt hij vanaf dat begin die string eruit. Op deze kun je hetzelfde geintje doen (je kunt de eerste zoveel tekens testen op (vermoed ik) "Yes" "No" of evt andere zaken en op de bovenstaande string (na dat beginstukje eruit gehaald te hebben):
PHP:
1
list($blaat) = sscanf($boleantje, "</Status><URL></URL><AccountID>%d</AccountID></Verify></Veryfies>"


Dan zit (als het goed is) in $blaat 117

Used to be Down Under... Foto gallery


  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 12-07 11:54
preg_match (zoek maar op in de manual)

  • PrinsEdje80
  • Registratie: Oktober 2001
  • Laatst online: 01-01 15:26

PrinsEdje80

Holographic, not grated...

Andere optie:
PHP:
1
2
$string = "<Veryfies><Verify><Status>Yes</Status><URL></URL><AccountID>117</AccountID></Verify></Veryfies>";
$string = eregi_replace("<(.*)>", "", $string);

Nu moet waarschijnlijk (.*) door een andere expressie worden vervangen, omdat nu van de eerste < tot de laatste > alles door de inhoud "" (= niets) wordt vervangen, maar dan houd je als het goed is
code:
1
Yes117

over en daar kun je dan ook weer mee spelen... Suc6

Used to be Down Under... Foto gallery


  • ReLight
  • Registratie: Augustus 2001
  • Laatst online: 05-08 21:32

ReLight

echo("What Now ? !")

of zo, beetje anders, wl lekker:
(wellicht voor de accountID meer chars lezen, en non nummers er aan het einde af strippen.


<?

$string = "<Veryfies><Verify><Status>Yes</Status><URL></URL><AccountID>117</AccountID></Verify></Veryfies>";
//echo($string); //debug
$stringcut = strstr($string,'<Status>');
//echo($stringcut); //debug
$status = substr($stringcut,8,3);
echo "Status=$status"; //will print 'Yes'
echo"<br>"; //readability
$stringcut = strstr($string,'<AccountID>');
//echo($stringcut); //debug
$AccountID = substr($stringcut,11,3); //pass the first 11 chars from <AccountID>, read the next 3
echo "AccountID=$AccountID"; //will print '117'

?>

Mijn zoon & dochter zijn de toekomst, de rest is tijdsvermaak. Home assistant & & Nibe S2125-12/SMO-S40, RMU-s40 & Tado - Volvo C40 ER, SE


  • kvdveer
  • Registratie: November 2000
  • Laatst online: 06-11-2025

kvdveer

Z.O.Z.

Is het al in je opgekomen dat dit wel erg lijkt op iets xml-ligs, en dat je het dus waarschijnlijk als XML moet afhandelen?

Localhost, sweet localhost


Verwijderd

Topicstarter
ReLight schreef op 27 augustus 2002 @ 00:22:
of zo, beetje anders, wl lekker:
(wellicht voor de accountID meer chars lezen, en non nummers er aan het einde af strippen.


<?

$string = "<Veryfies><Verify><Status>Yes</Status><URL></URL><AccountID>117</AccountID></Verify></Veryfies>";
//echo($string); //debug
$stringcut = strstr($string,'<Status>');
//echo($stringcut); //debug
$status = substr($stringcut,8,3);
echo "Status=$status"; //will print 'Yes'
echo"<br>"; //readability
$stringcut = strstr($string,'<AccountID>');
//echo($stringcut); //debug
$AccountID = substr($stringcut,11,3); //pass the first 11 chars from <AccountID>, read the next 3
echo "AccountID=$AccountID"; //will print '117'

?>
heel erg bedankt! dit werkt zo wel! Alleen wat ik me ff afvroeg, werkt dit ook als status No is?? Ik zal et ff proberen..

[edit]
geprobeert! En ik komt dan No< uit, wat ik al had verwacht.. Maar dat maakt verder weinig uit hoor ;)

En dan nog een dingetje: wat net werd gezegd dat het xml is, dat klopt ja, en ik had zelf ook al een vermoeden dat het dan met de xml functies van php moet kunnen toch? Is misschien veel makkelijker dan dit.. ff kijken :)

  • GraasGast
  • Registratie: Oktober 2000
  • Laatst online: 04-08 13:06

GraasGast

Analogue Heaven

ehm...mischien wat simpeler:

PHP:
1
2
preg_match("/<AccountID>([^\<]+)/", $string, $match);
print($match[1]); // hier zit 117 in

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Is er niemand die ziet dat dat xml is?

Is het niet iets om even naar de expat xml lib van PHP te kijken?

edit:
Of eventueel even een xsl-etje er voor schrijven, natuurlijk.

Zie ook sablotron

edit:
kvdveer zag het dus al wel :* :D

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • GraasGast
  • Registratie: Oktober 2000
  • Laatst online: 04-08 13:06

GraasGast

Analogue Heaven

ja dat had ik al gezien, er nog wat meer mensen ook, maar de topicstarter lijkt enigzins een newbie, dus om hem nou expat en de hele meuk te gaan laten compilen vind ik ook weer zoiets.

[ Voor 0% gewijzigd door GraasGast op 27-08-2002 15:13 . Reden: typo ]


  • flat
  • Registratie: Mei 2000
  • Niet online
drm schreef op 27 augustus 2002 @ 15:10:
Is er niemand die ziet dat dat xml is?

Is het niet iets om even naar de expat xml lib van PHP te kijken?
dat wilde ik dus net gaan zeggen
misschien dat 'ie er zelf 'n XSL-ding voor kan maken, da's misschien makkelijk (weet niet hoe 't met de rest van z'n site zit)

"Happiness is a way of travel, not a destination."
--Roy Goodman


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

GraasGast:
ja dat had ik al gezien, er nog wat meer mensen ook, maar de topicstarter lijkt enigzins een newbie, dus om hem nou expat en de hele meuk te gaan laten compilen vind ik ook weer zoiets.
Lijkt me ietwat vreemd om dat voor de topicstarter te gaan bepalen, en hem er niet op te wijzen, maar goed ;)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

Verwijderd schreef op 26 augustus 2002 @ 23:43:
ik eb daar niet veel verstand van maar wel van html,ik zie wel dat de yes en de 117 niet tussen <> staat
dat is ook geen html

Verwijderd

XML-library? Niet nodig. Gewoon lekker PCRE gebruiken:
PHP:
1
2
$stukje_yes = preg_replace("/^(.*)<Status>(.*)<\/Status>(.*)$/Ui","\\1",$string);
$stukje_117 = preg_replace("/^(.*)<AccountId>(.*)<\/AccountId>(.*)$/Ui","\\1",$string);

Moet het doen!

  • GraasGast
  • Registratie: Oktober 2000
  • Laatst online: 04-08 13:06

GraasGast

Analogue Heaven

Verwijderd schreef op 27 augustus 2002 @ 15:19:
XML-library? Niet nodig. Gewoon lekker PCRE gebruiken:
PHP:
1
2
$stukje_yes = preg_replace("/^(.*)<Status>(.*)<\/Status>(.*)$/Ui","\\1",$string);
$stukje_117 = preg_replace("/^(.*)<AccountId>(.*)<\/AccountId>(.*)$/Ui","\\1",$string);

Moet het doen!
Ja...wat post ik nou net :P

[^\<]* is trouwens sneller dan .*

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 06-11-2025

kvdveer

Z.O.Z.

Verwijderd schreef op 27 augustus 2002 @ 15:19:
XML-library? Niet nodig. Gewoon lekker PCRE gebruiken:
PHP:
1
2
$stukje_yes = preg_replace("/^(.*)<Status>(.*)<\/Status>(.*)$/Ui","\\1",$string);
$stukje_117 = preg_replace("/^(.*)<AccountId>(.*)<\/AccountId>(.*)$/Ui","\\1",$string);

Moet het doen!
Onjuist. De code werkt misschien wel, maar is niet betrouwbaar.
XML is ontworpen om flexibel te zijn zodat je het kan uitbreiden zonder dat je bestaande applicaties breekt.
Stel dat hij nu dit bestand aangeleverd krijgt:
code:
1
2
3
4
5
6
7
8
9
10
11
12
<Veryfies>
  <Verify>
    <Status>Yes</Status>
    <URL></URL>
    <AccountID status=reliable>117</AccountID>
  </Verify>
</Veryfies>
<Unveryfied>
  <AccountID>992</AccountID>
  <AccountID>292</AccountID>
  <AccountID>142</AccountID>
</Unveryfied>


Dat is even geldige code, alleen hebben ze het wat uitgebreid. Jou code zou hiermee gebroken zijn, maar met een xml-parser kun je vrolijk verder.
Ga niet lopen kloten met regexpen als je het met een XML-parser kunt regelen.

Localhost, sweet localhost


  • ReLight
  • Registratie: Augustus 2001
  • Laatst online: 05-08 21:32

ReLight

echo("What Now ? !")

heeft iemand een lijstje van al die .*/^ $Ui etc etc tekens en de betekenis ?
Ik raak altijd helemaal confuus van dat spul..

Mijn zoon & dochter zijn de toekomst, de rest is tijdsvermaak. Home assistant & & Nibe S2125-12/SMO-S40, RMU-s40 & Tado - Volvo C40 ER, SE


Verwijderd

over regexes is genoeg te vinden welk teken wat betekend, even zoeken op google ...
Pagina: 1