login  Naam:   Wachtwoord: 
Registreer je!
 Forum

String opslitsen (Opgelost)

Offline Oneday - 11/07/2011 13:18 (laatste wijziging 11/07/2011 13:19)
Avatar van OnedayNieuw lid Hey ik ben bezig met een IRC bot in PHP, nu krijg ik volgende info binnen als er wat gezegd wordt:

:Kaj!~Kaj@Kaj.user.OnlineGamesNet PRIVMSG #channel :dit is een zin om te testen 

Wat ik nu wil doen is het volgende verkrijgen:

  1. $hostmask = "Kaj!~Kaj@Kaj.user.OnlineGamesNet";
  2. $method = "PRIVMSG";
  3. $source = "#channel"; //Kan ook een nicknaam zijn (dus zonder de #)
  4. $text = "dit is een zin om te testen :)";


Ik heb echter geen idee hoe ik dit moet doen, zou iemand me hier mee kunnen helpen?

Bij voorbaat enorm bedankt!

~Oneday

12 antwoorden

Gesponsorde links
Offline mwthomas - 11/07/2011 13:32
Avatar van mwthomas Lid substring
Offline WouterJ - 11/07/2011 13:34
Avatar van WouterJ HTML gevorderde Kijk eens naar PHP.net: preg_match. Hiervoor moet je goed zijn in regexen maken. Een goede tutorial daarover: http://www.phph...ssions/520/
Offline Oneday - 11/07/2011 13:50
Avatar van Oneday Nieuw lid
Waldio schreef:
Kijk eens naar PHP.net: preg_match. Hiervoor moet je goed zijn in regexen maken. Een goede tutorial daarover: http://www.phph...ssions/520/

Maar regex geeft toch enkel "true" terug als het matcht? Hoe haal je dan deeltje per deeltje de info er uit als je enkel "true" of "false" terugkrijgt?


@mwthomas: Met substr gaat 't niet omdat het aantal tekens van de hostmask, 't channel etc variabel zijn.
Offline pijke - 11/07/2011 15:03
Avatar van pijke Gouden medaille

Lid
je kun denk ik beter preg_split gebruiken. die splitst hem op in een array.
Offline pijke - 11/07/2011 15:03 (laatste wijziging 11/07/2011 15:03)
Avatar van pijke Gouden medaille

Lid
dubbelpost
Offline Oneday - 11/07/2011 15:15
Avatar van Oneday Nieuw lid
pijke schreef:
je kun denk ik beter preg_split gebruiken. die splitst hem op in een array.

Ik kan er echt niet aan uit, heb eens 't volgende geprobeerd:

  1. $test = preg_split("/^PRIVMSG/",$return);


Maar dan krijg ik gewoon alles terug maar dan in een array?
Offline mwthomas - 11/07/2011 15:31
Avatar van mwthomas Lid Die info die je binnen krijgt, is deze altijd hetzelfde opgebouwd?
Daarmee bedoel ik op deze manier:
:Kaj!~Kaj@Kaj.user.OnlineGamesNet PRIVMSG #channel
:Kaj!~Kaj@Kaj.user.OnlineGamesnl PRIVMSG1 #channel1
:Kaj!~Kaj@Kaj.user.OnlineGamesbe PRIVMSG2 #channel2

Anders kun je deze zoals pijke zei met preg_split gaan splitsen en zoeken op een spatie.
Offline Oneday - 11/07/2011 15:51
Avatar van Oneday Nieuw lid
mwthomas schreef:
Die info die je binnen krijgt, is deze altijd hetzelfde opgebouwd?
Daarmee bedoel ik op deze manier:
:Kaj!~Kaj@Kaj.user.OnlineGamesNet PRIVMSG #channel
:Kaj!~Kaj@Kaj.user.OnlineGamesnl PRIVMSG1 #channel1
:Kaj!~Kaj@Kaj.user.OnlineGamesbe PRIVMSG2 #channel2

Anders kun je deze zoals pijke zei met preg_split gaan splitsen en zoeken op een spatie.

Ja die is altijd zo opgebouwd, splitsen met spatie kan, maar dan kom je, in dit voorbeeld in de problemen met het bericht "dit is een zin om te testen " want daar komen ook spaties in voor.
Offline pijke - 11/07/2011 15:59
Avatar van pijke Gouden medaille

Lid
niet getest:
/(.*?)\ {1} (.*?)\ (.*?)\ \:(.*?)/
Offline Oneday - 11/07/2011 16:06
Avatar van Oneday Nieuw lid
pijke schreef:
niet getest:
/(.*?) {1} (.*?) (.*?) .*?)/

Ik krijg nu gewoon weer alles terug


array
0 => string ':Kaj|AFK!~Kaj@Kaj.user.OnlineGamesNet PRIVMSG #tus :bla bla bla ik ben een kipje 


Hoe moet je zo'n regex juist opbouwen want ik snap echt niets van die dingen Heb tutorial paar keer doorgelezen en ik weet waar de tekens voor dienen, maar niet hoe ik daarmee zorg dat ik deeltje per deeltje in een array krijg.
Offline WouterJ - 11/07/2011 16:07 (laatste wijziging 11/07/2011 16:13)
Avatar van WouterJ HTML gevorderde @pijke, ik zou het zo doen:

  1. /^(.*?)\s(.*?)\s(.*?)\s(.*?)$/


@Oneday, preg_match returned het aantal keer dat de string is gevonden. Als de string niet wordt gevonden returned het 0, wat gelijk is aan false.
Maar doormiddel van het extra heren van de preg_match kun je alles mooi in een array opvangen.

Wat de code dus zal worden:
  1. $input = ':Kaj!~Kaj@Kaj.user.OnlineGamesNet PRIVMSG #channel :dit is een zin om te testen';
  2. preg_match('/^(.*?)\s(.*?)\s(.*?)\s(.*?)$/', $input, $matches);
  3. /* $matches bevat nu:
  4. Array (
  5.   [0] => ':Kaj!~Kaj@Kaj.user.OnlineGamesNet PRIVMSG #channel :dit is een zin om te testen',
  6.   [1] => ':Kaj!~Kaj@Kaj.user.OnlineGamesNet'.,
  7.   [2] => 'PRIVMSG',
  8.   [3] => '#channel',
  9.   [4] => 'dit is een zin om te testen'
  10. )
  11. */


[EDIT] Grote fout bij het aanroepen van de functie
Bedankt door: Oneday
Offline Oneday - 11/07/2011 16:24
Avatar van Oneday Nieuw lid
Waldio schreef:
@pijke, ik zou het zo doen:

[..code..]

@Oneday, preg_match returned het aantal keer dat de string is gevonden. Als de string niet wordt gevonden returned het 0, wat gelijk is aan false.
Maar doormiddel van het extra heren van de preg_match kun je alles mooi in een array opvangen.

Wat de code dus zal worden:
[..code..]

[EDIT] Grote fout bij het aanroepen van de functie

Het is me gelukt! Hartelijk bedankt!  
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.301s