Woorden verwijderen uit string

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Matthijs Vos

Matthijs Vos

22/06/2012 17:34:21
Quote Anchor link
Hallo Allemaal,

Ik ben bezig met het opslaan van meldingen vanuit een rss feed. Nu wil ik de inhoud van de Rss feed eerst wat aanpassen voor het word opgeslagen. Ik heb bijvoorbeeld:

25-901 A1 ALMERE Leeuwerikweg COORD M 14 B RIT:217

Nu wil ik alleen opslaan 25-901 A1 ALMERE Leeuwerikweg
Dus alles na het woord COORD moet worden verwijderd, is dit mogelijk en zo ja met welke functie???

Matthijs Vos
 
PHP hulp

PHP hulp

27/01/2021 04:45:52
 
Wouter J

Wouter J

22/06/2012 17:36:36
Quote Anchor link
Met preg_replace (moet je wel even leren regexen: http://www.phphulp.nl/php/tutorial/php-functies/regular-expressions/520/ ):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$str
= '25-901 A1 ALMERE Leeuwerikweg COORD M 14 B RIT:217';

echo 'Niet getest, hoort te werken:', preg_replace('/COORD.*?$/s', '', $str);
?>
 
Roy -

Roy -

22/06/2012 17:39:56
Quote Anchor link
Of explode

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$str
= '25-901 A1 ALMERE Leeuwerikweg COORD M 14 B RIT:217';
$arr = explode('COORD',$str);
echo $arr[0]; //25-901 A1 ALMERE Leeuwerikweg
echo $arr[1]; // M 14 B RIT:217
?>
 
Wouter J

Wouter J

22/06/2012 17:46:38
Quote Anchor link
Kan inderdaad ook, al zou ik het in 1 regel doen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$str
= '25-901 A1 ALMERE Leeuwerikweg COORD M 14 B RIT:217';
$str = reset(explode('COORD',$str));

echo $str;
?>

Of, wat mogelijk is sinds PHP5.4:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$str
= '25-901 A1 ALMERE Leeuwerikweg COORD M 14 B RIT:217';
$str = explode('COORD',$str)[0];

echo $str;
?>
 
Jens erd

Jens erd

22/06/2012 18:06:47
Quote Anchor link
Wouter J op 22/06/2012 17:46:38:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$str
= '25-901 A1 ALMERE Leeuwerikweg COORD M 14 B RIT:217';
$str = reset(explode('COORD',$str));

echo $str;
?>


Incorrect: op het eerste gezicht lijkt dit te kloppen, maar als je het uittest dan krijg je een keiharde foutmelding (Strict Standards: Only variables should be passed by reference). Zou je reset() op een nieuwe regel plaatsen, dan werkt het wel.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$str
= '25-901 A1 ALMERE Leeuwerikweg COORD M 14 B RIT:217';
$str = current(explode('COORD',$str));
echo $str;
?>

werkt daarentegen prima.
 
B Polak

B Polak

22/06/2012 20:54:01
Quote Anchor link
Indien je meerdere strings wilt checken en meerdere woorden makkelijker wilt uitfilteren, is een dergelijke functie als woordfilter wel handig.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
function woordfilter($text)
{
    
    $filter = array("COORD","anderewoorden");
    $text = str_replace($filter,"", $text);
    return $text;
}


// voorbeeld input
$gegevens = "25-901 A1 ALMERE Leeuwerikweg COORD M 14 B RIT:217";

// langs de woordfilter
$gegevens = woordfilter($gegevens);

/* output $gegevens  :
25-901 A1 ALMERE Leeuwerikweg M 14 B RIT:217
*/


?>
 
Wouter J

Wouter J

22/06/2012 23:10:30
Quote Anchor link
B polak, weer een leesfoutje:
Quote:
Dus alles na het woord COORD moet worden verwijderd
 
B Polak

B Polak

23/06/2012 09:14:04
Quote Anchor link
Wouter J op 22/06/2012 23:10:30:
B polak, weer een leesfoutje:
Quote:
Dus alles na het woord COORD moet worden verwijderd


Moet je weer poepen? Mag wel hoor Wouter, maar doe het voortaan uit het zicht.
Gewijzigd op 23/06/2012 09:28:16 door B Polak
 
Wouter J

Wouter J

23/06/2012 09:58:34
Quote Anchor link
Ach, jou oplossing kan misschien wel leuk en goed zijn (niet echt snel, maar dat is mijn PREG oplossing ook niet), maar het lost totaal niet op wat de TS vraagt. Want op deze manier kun je nooit alles na een woord weghalen.

Als je de oplossing van Roy wilt gebruiken met meerdere woorden kun je zoiets doen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
function filter_word($str, $filters)
{

    if (!is_array($filters)) {
        $filters = array($filters);
    }


    foreach ($filters as $filter) {
        $str = current(explode($filter, $str));
    }

    return $str;
}

?>


Of met mijn PREG oplossing (trager, die van Roy is de beste):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
function filter_word($str, $filters)
{

    if (!is_array($filters)) {
        $filters = array($filters);
    }


    $filters = implode('|', preg_quote($filters));

    return preg_replace('/('.$filters.').*?$/m', '', $str);
}

?>


Gebruik:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
$text
= '25-901 A1 ALMERE Leeuwerikweg COORD M 14 B RIT:217';

// enkel filter
$newText = filter_word($text, 'COORD'); // 25-901 A1 ALMERE Leeuwerikweg

// meerdere filters

$newText1 = filter_word($text, array(
    'COORD',
    'ALMERE',
));
// 25-901 A1
?>


Het enige verschil tussen de, snellere, oplossing van Roy en die van mij is dat die van mij tot aan de linebreak gaat. Dat kan heel handig zijn, denk bijv. als je een string hebt waarin meerdere regels zitten en je elke regel wilt verwijderen achter COORD:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
$text
= '25-901 A1 ALMERE Leeuwerikweg COORD M 14 B RIT:217
21-486 D26 AMSTERDAM Rembrandtlaan COORD M 12 B RIT:172'
;

$newText = filter_word($text, 'COORD');
// 25-901 A1 ALMERE Leeuwerikweg
// 21-486 D26 AMSTERDAM Rembrandtlaan

?>
Gewijzigd op 23/06/2012 09:59:11 door Wouter J
 
Matthijs Vos

Matthijs Vos

24/06/2012 17:53:16
Quote Anchor link
Heey Allemaal,

Bedankt voor alle oplossingen. Het is me gelukt met de explode methode.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.