reguliere expressie, match woorden die beginnen met...
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)
Ik probeer dat met:
Code (php)
1
2
2
$regex = "/_pi_lang_.*\b/";
$string = preg_replace_callback($regex, array( &$this, 'str_replace_callback'), $string);
$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
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.
_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.
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
. = alle tekens behalve spatie's (\s)
\w = A-Z en a-z en 0-9 en _