Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Webprogrammeren & scripting

woorden uit een grote string halen en opslaan

Annie
26 antwoorden
  • Hallo,

    Ik weet zeker dat hier een functie voor moet zijn, ik kan hem alleen niet vinden.

    Ik zou graag een functie willen maken waarmee ik dmv knippen en plakken bepaalde woorden kan herkennen en opslaan.

    Het moet een formulier zijn met 1 invoerveld, waar ik bij wijze van spreken een hele pagina in kan plakken (je hoeft dat niet te zien, 10 karakters is al genoeg)

    Wanneer ik dan op Go klik moet ie in die tekst gaan zoeken naar bij voorbeeld het woord AUTO en dan het woord DAARACHTER opslaan in een array.

    Voorbeeld:

    ……tekst…… auto (opel) ……….tekst……. heeft een automaat……

    Hiervan moet hij alleen het woord opel oppikken, automaat dus niet en het woord auto zelf ook niet. Als het woord Auto meerdere malen voorkomt, moet hij het ook meerdere malen vinden en opslaan en de "opels" staan altijd tussen de ( )..

    Opel is een voorbeeld, het kan ook zijn dat er " grote dikke amerikaan" staat. Dat weet ik van te voren niet.

    hoe kan ik dit het beste aanpakken?

    Het gaat mij dus om het zoeken en in een array zetten. Het plaatsen in een DB of bestand zal me wel lukken..
  • Herkennen van patronen in tekst kan met regular expressions. Afhankelijk van de 'eenvoud' van de patronen kan dit redelijk recht-toe-recht-aan zijn, maar het kan ook behoorlijk ingewikkeld worden. Zeker als je nog weinig ervaring hiermee hebt.

    In welke taal werk je eigenlijk?
  • oeps sorry, vergeten te melden. PHP

    Ik heb al flink zitten spitten op meerdere php-sites maar het lijkt erop dat het moelijker gaat worden dan ik dacht.

    Ik zat simpel te denken, "zoek ( " en stop alles in een array tot je een ") " vindt.

    zo simpel is het dus niet…
  • Als je inderdaad alle teksten tussen haakjes wil hebben, dan is het wel redelijk simpel te doen. Kijk maar eens in de manual voor voorbeelden.

    bijv:
    [code:1:745346ab94]
    <?php
    $tekst = "tekst tekst auto (opel) tekst, tekst auto (amerikaanse sloep) tekst tekst.";

    preg_match_all("/\((.*?)\)/", $tekst, $matches);

    echo "input: ", $tekst, "<br/>";
    echo "<pre>";
    var_dump($matches);
    echo "</pre>";
    ?>
    [/code:1:745346ab94]
  • hee! das super!

    ik zat te klooien met substr strstr en dat soort en weer eens veel te moeilijk te denken..

    hier kan ik denk ik wel wat mee
  • Ik ga hier vanavond eens mee spelen, ik moet wel wat ingewikkelder expressie maken..

    Dit is uiteindelijk de bedoeling:

    Op de website staat dit:

    1 [TEAM1916V] Sander ( phase 1 16V )
    2 [RTC] Erwin ( Clio 16V )
    3 [TEAM1916V] Remi ( Phase 3 cabrio ) *

    Als je dit knipt en plakt in een invoervak, wordt de string:

    1 [TEAM1916V] Sander ( phase 1 16V ) 2 [RTC] Erwin ( Clio 16V ) 3 [TEAM1916V] Remi ( Phase 3 cabrio ) *

    Nu moet dit geordend (dus door knippen en plakken) in een database gezet worden en moet het script het verband houden met het nummer, net zoals het op de website staat.

    Wordt dus moelijker dan ik dacht…
  • Welke data wil je dan precies hebben?
    Waar ben je zeker van?

    Gaat het alleen om de data tussen haakjes ? of team / naam /auto
    staat er altijd een spatie tussen de onderdelen?
    staat het altijd in de goede volgorde qua nummers?
    Komt er nooit een [ of ] in het eerste deel en nooit een ( of ) in het laatste deel?
    Moet dat sterretje ook mee ?
    Weet je op welke namen je moet zoeken ?
    Bestaat een naam (erwin, sander) altijd uit 1 woord, of kunnen dit er meerdere zijn ?

    Een basis regexp om de lijn te splitten tussen de verschillende regels:

    preg_match_all("/(\d+)\s+\[([^\]]+)\]\s+([^\(]+?)\s+\(\s*([^\)]+?)\s*\)\s*\*?/", $tekst, $matches);

    Als alles goed gaat, dan komt je array er zo uit te zien:

    [code:1:1c8c15b58c]
    array(5) {
    [0]=>
    array(3) {
    [0]=>
    string(37) "1 [TEAM1916V] Sander ( phase 1 16V ) "
    [1]=>
    string(33) "2 [RTC] Erwin Vries ( Clio 16V ) "
    [2]=>
    string(39) "3 [TEAM1916V] Remi ( Phase 3 cabrio ) *"
    }
    [1]=>
    array(3) {
    [0]=>
    string(1) "1"
    [1]=>
    string(1) "2"
    [2]=>
    string(1) "3"
    }
    [2]=>
    array(3) {
    [0]=>
    string(9) "TEAM1916V"
    [1]=>
    string(3) "RTC"
    [2]=>
    string(9) "TEAM1916V"
    }
    [3]=>
    array(3) {
    [0]=>
    string(6) "Sander"
    [1]=>
    string(11) "Erwin Vries"
    [2]=>
    string(4) "Remi"
    }
    [4]=>
    array(3) {
    [0]=>
    string(11) "phase 1 16V"
    [1]=>
    string(8) "Clio 16V"
    [2]=>
    string(14) "Phase 3 cabrio"
    }
    }


    [/code:1:1c8c15b58c]

    Nog even in het Nederlands:

    (\d+) - 1 of meerdere getallen (de id)
    \s+ - gevolgd door 1 of meerdere spaties - niets mee doen
    \[([^\]]+)\] - gevolgd door een [ gevolgd door alles wat geen ] is, gevolgd door ]
    \s+ - gevolgd door 1 of meerdere spaties - niets mee doen
    ([^\(]+?) - alles wat geen ( is, gevolgd door ) - dit is naam, zo krijg je ook spaties in de naam mee
    \s+ - gevolgd door 1 of meerdere spaties - niets mee doen
    \(\s*([^\)]+?)\s*\) - gevolgd door ( gevolgd door 0 of meerdere spaties gevolgd door alles wat geen ) is, gevolgd door 0 of meer spaties, gevolgd door ) - de auto
    \s*\*? - gevolgd door 0 of meer spaties en 0 of 1 * - het sterretje
  • Fijn!

    Dit is zeker:

    1[/color:1e4bbf9e77] [TEAM1916V[/color:1e4bbf9e77]] Sander [/color:1e4bbf9e77]( phase 1 16V[/color:1e4bbf9e77] )

    Waarbij het blauwe het gene is wat opgeslagen moet worden en kan wijzigen het zwarte is vast.

    De informatie moet wel bij elkaar blijven, dus 1 hoort bij Team1916V en Sander
  • dat gebeurt ook, alleen werkt de $matches array iets anders dan je misschien zou denken.

    $matches[1][0], $matches[2][0], $matches[3][0] en $matches[4][0]

    vormt 1 regel, net als

    $matches[1][1], $matches[2][1], $matches[3][1] en $matches[4][1]

    De eerste index slaat op een gedeelte van de regular expression tussen haakjes.
  • Hoe geef ik de array dan weer?

    met een For of een while?
  • [quote:7ac4bae0e4="sander16v"]Hoe geef ik de array dan weer?

    met een For of een while?[/quote:7ac4bae0e4]
    Beide kan.
  • nee toch niet…

    ik weet niet hoeveel er in de array zullen komen… dus dan maar een while..
  • [quote:a9210e11c8="Annie"][code:1:a9210e11c8]
    echo "<pre>";
    var_dump($matches);
    echo "</pre>";
    [/code:1:a9210e11c8][/quote:a9210e11c8]

    Annie, wat doet deze code?

    <pre>
    var_dump…
    </pre>
  • grr. het wordt toch lastiger.. (weer)

    1e probleem..

    1 [TEAM1916V] Sander ( phase 1 16V )

    tussen de 1 en [team1916v] kan nog een letter staan (maar niet perse) Dit is 1 letter.

    de [team1916v] is ook niet standaard zie ik nu… als die persoon nog geen lid is van onze vereniging of van een andere staat daar helemaal niets.
  • ok na speuren de expressie aangepast..

    preg_match_all("/(\d+)\s.?\s+\[([^\]]+)\]\s+([^\(]+?)\s+\(\s*([^\)]+?)\s*\)\s*\*?/", $tekst, $matches);


    hij ziet nu dat er een teken NA de 1 mag staan… maar hij slaat hem niet op in de array??

    Ok te snel gelezen, nu wel:

    [code:1:26f42e2eb8]
    preg_match_all("/(\d+)\s(.?)\s+\[([^\]]+)\]\s+([^\(]+?)\s+\(\s*([^\)]+?)\s*\)\s*\*?/", $tekst, $matches);
    [/code:1:26f42e2eb8]

    maar hoe maak ik nu het […….team……] ook optioneel?
  • [quote:762f59089d="sander16v"]nee toch niet…

    ik weet niet hoeveel er in de array zullen komen… dus dan maar een while..[/quote:762f59089d]Die kan je gewoon tellen! ;)

    - Bas
  • Dank je Bas, had ik al gevonden :lol:

    ik zit nu meer met die variabele [.foo.] …

    Of is het in dit geval handiger om 2 regexps te maken?
  • \[([^\]]+)\]\s+

    vervangen door

    (?:\[([^\]]+)\]\s+)?
  • Wauw!

    Waar kan ik dit soort dingen leren? ik lees me suf!

    ik heb een aantal boeken maar die beschrijven alle 3 wat anders en heel summier.
  • voor regular expressions is eigenlijk maar 1 boek (alhoewel er 2 edities zijn): Mastering Regular Expressions van Jeffrey Friedl. Het is humoristisch en bevat werkelijk alle informatie over regexps die je maar kunt bedenken.

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.