Woorden verwijderen uit string
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
preg_replace (moet je wel even leren regexen: http://www.phphulp.nl/php/tutorial/php-functies/regular-expressions/520/ ):
Met Code (php)
1
2
3
4
5
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);
?>
$str = '25-901 A1 ALMERE Leeuwerikweg COORD M 14 B RIT:217';
echo 'Niet getest, hoort te werken:', preg_replace('/COORD.*?$/s', '', $str);
?>
Code (php)
Of, wat mogelijk is sinds PHP5.4:
Wouter J op 22/06/2012 17:46:38:
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)
werkt daarentegen prima.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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
*/
?>
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
*/
?>
Quote:
Dus alles na het woord COORD moet worden verwijderd
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
Als je de oplossing van Roy wilt gebruiken met meerdere woorden kun je zoiets doen:
Code (php)
Of met mijn PREG oplossing (trager, die van Roy is de beste):
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
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);
}
?>
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)
1
2
3
4
5
6
7
8
9
10
11
12
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
?>
$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)
1
2
3
4
5
6
7
8
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
?>
$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
Bedankt voor alle oplossingen. Het is me gelukt met de explode methode.