[php] hoofdletter ongevoelig 'replacen'

Pagina: 1
Acties:

  • ddofborg
  • Registratie: Augustus 2000
  • Laatst online: 26-02 09:52
...ik vroeg mij af of er een functie is in PHP lib, die hoofdletter ongevoelig kan replacen... voorbeeld:

stel je hebt een string S1 = "Jan gaat naar huis. GUI is cool." en je wilt in S1 string "UI" vervangen door "{b}UI{/b}".
Het probleem is, dat "UI" twee keer in S1 voorkomt. N.l. in "huis" en in "GUI", maar wel met verschillenden hoofd- en kleinletters.

Is er een functie in van S1 dit maakt: "Jan gaat naar h{b}ui{/b}s. G{b}UI{/b} is cool."?

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

preg_replace met de 'i' modifier.

  • ddofborg
  • Registratie: Augustus 2000
  • Laatst online: 26-02 09:52
...zal zo ff kijken... thx

  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

van de str_replace manual page op php.net:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?
// My contribution to php a case insensitive search and replace. 

function stri_replace($searchFor, $replaceWith, $string, $offset = 0) {
      $lsearchFor = strtolower($searchFor);
      $lstring = strtolower($string);
      $newPos = strpos($lstring, $lsearchFor, $offset);
      if (strlen($newPos) == 0) {
         return($string);
      } else{
         $left = substr($string, 0, $newPos);
         $right = substr($string, $newPos + strlen($searchFor));
         $newStr = $left . $replaceWith . $right;
         return stri_replace($searchFor, $replaceWith, $newStr, $newPos +
strlen($replaceWith));
      }
}
?>

  • ddofborg
  • Registratie: Augustus 2000
  • Laatst online: 26-02 09:52
stri_replace doet het (bijna)! thx..

Verwijderd

Als je reguliere expressies gebruikt kan je met de '$-teken' aangeven dat je wilt zoeken in het einde van de string.

  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

Op dinsdag 05 februari 2002 15:16 schreef RealGamer het volgende:
Als je reguliere expressies gebruikt kan je met de '$-teken' aangeven dat je wilt zoeken in het einde van de string.
:?:?:?

Wat heeft dat met de originele vraag te maken ?

Verwijderd

Het is een alternatief, ipv hoofdlettergevoelig vervangen kan je via reguliere expressie de laatste 'ui' van de string opzoeken en dan vervangen door de gewenste string.

  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

Hij wil beide 'ui'-s vervangen, dus wat heb je er dan aan dat ie de 'ui' aan het einde van de string vervangt ?

  • ddofborg
  • Registratie: Augustus 2000
  • Laatst online: 26-02 09:52
wat is eigenlijk wil is tekst in een string hilighten... dus als ik "jan" wil highlighten in "Jansen Jan", dan wordt dit "Jansen Jan"... en niet ""jansen jan" is er een andere oplossing voor dan?

Verwijderd

Op dinsdag 05 februari 2002 18:16 schreef TheRookie het volgende:
Hij wil beide 'ui'-s vervangen, dus wat heb je er dan aan dat ie de 'ui' aan het einde van de string vervangt ?
Ik heb de vraag verkeerd begrepen.
Op dinsdag 05 februari 2002 18:39 schreef ddofborg het volgende:
wat is eigenlijk wil is tekst in een string hilighten... dus als ik "jan" wil highlighten in "Jansen Jan", dan wordt dit "Jansen Jan"... en niet ""jansen jan" is er een andere oplossing voor dan?
Met stringtolower(string str) zet je alle letters in de string om in kleine letters.

  • tomato
  • Registratie: November 1999
  • Niet online
PHP:
1
2
3
<?
$s = preg_replace('/(jan)/i', '<b>$1</b>', $s);
?>

Of als 'jan' vast staat is dit een stuk sneller en ook werkbaar:
PHP:
1
2
3
<?
$s = preg_replace('/([jJ][aA][nN])/', '<b>$1</b>', $s);
?>

  • ddofborg
  • Registratie: Augustus 2000
  • Laatst online: 26-02 09:52
dat laatste werkt perfect... bedankt!
Pagina: 1