reguliere expressie, match woorden die beginnen met...

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Carsten eng

carsten eng

26/12/2010 08:47:06
Quote Anchor link
Ik wil allemaal woorden matchen en bewerken die beginnen met een bepaalde string.

Het gaat om een script om oude language-referenties in php-files te vervangen door nieuwe, dus looped het script door php-files om woorden die beginnen met '_pi_lang_' te vervangen door het nieuwe format van language referenties.

Voorbeeldje van een (stukje) string:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<a href="index2.php?option=com_pi_pages_and_items&view=config&tab=itemtypes"><?php echo _pi_lang_config; ?></a>
<?php echo $this->controller->translate_item_type($item_type).' '._pi_lang_config; ?>
<h2><?php echo $this->controller->translate_item_type($item_type).' '._pi_lang_config; ?></h2>


Ik probeer dat met:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
$regex = "/_pi_lang_.*\b/";            
$string = preg_replace_callback($regex, array( &$this, 'str_replace_callback'), $string);


Maar de regex pakt het woordeind niet goed. Dit zijn de matches:

_pi_lang_config; ?></a
_pi_lang_config
_pi_lang_config; ?></h2


het is me een compleet raadsel waarom die zelfde regex bij de ene "_pi_lang_config;" wel "_pi_lang_config" eruit pakt en de andere keren de "; ?>"(etc.) er ook bij pakt.

Ik heb al uren gezocht op allerlei sites, maar ik kom er niet uit.

Wat doe ik verkeerd om alleen die woorden te matchen?
Gewijzigd op 27/12/2010 09:44:40 door Carsten eng
 
PHP hulp

PHP hulp

22/12/2024 18:57:10
 
Jelmer -

Jelmer -

26/12/2010 11:50:04
Quote Anchor link
de dot matcht zo'n beetje alles (behalve newlines, tenzij je weer een modifier gebruik). Ik denk dat je \w zoekt, die matcht letters, cijfers en underscores.
 
Carsten eng

carsten eng

27/12/2010 09:46:45
Quote Anchor link
precies hetzelfde resultaat met

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$regex = "/_pi_lang_.*\w/";  


Wat zie ik nou toch over het hoofd?
 
Wouter J

Wouter J

27/12/2010 10:26:00
Quote Anchor link
Je moet die . weg halen. Dus het word:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$regex
= '/_pi_lang_*\w/'
?>
 
Carsten eng

carsten eng

27/12/2010 13:34:59
Quote Anchor link
dat geeft:

_pi_lang_c
_pi_lang_c
_pi_lang_c

Ik dacht dat "." een teken is, en "*" staat voor oneindig maal dat, dus bij elkaar staat er dan: alles wat erna komt. Dan met de \w zou ie het bij eind van het woord moeten afbreken.
 
F Loogman

F Loogman

27/12/2010 15:36:10
Quote Anchor link
Dat moet natuurlijk zijn;

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$regex
= '/_pi_lang_\w*/'
?>


de . matcht ook niet-word karakters tussen de match en het laatste word karakter op de regel, die moet dus weg. De \w is een goede zet, maar dan moet het sterretje er wel achter.

Zie ook;

http://www.regular-expressions.info/wordboundaries.html
 
Wouter J

Wouter J

27/12/2010 16:31:44
Quote Anchor link
De basis is inderdaad:
. = alle tekens behalve spatie's (\s)
\w = A-Z en a-z en 0-9 en _
 
Carsten eng

carsten eng

27/12/2010 17:22:47
Quote Anchor link
YEAH! dat was 'm.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$regex = '/_pi_lang_\w*/';

Dank jullie wel! weer wat geleerd.
 



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.