preg_replace (...,...,ucfist('\3')) - geht das?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • preg_replace (...,...,ucfist('\3')) - geht das?

    So sieht der Ersetzungsausdruck aus:

    preg_replace('/(.*?)(&nbsp(.*?)/','\1'. ucfist('\3'), $text);

    Ein String mit   in der Mitte soll aufgeteilt und der letzte Anfang des Strings dann grossgeschrieben werden. Leider geht das nicht. Der String wird nicht gross ... Woran liegt das?
    Zuletzt geändert von janein; 22.11.2007, 18:28.

  • #2
    preg_replace_callback()

    Kommentar


    • #3
      text = "Test wort";

      a)
      Code:
      function grossmachen($treffer) {
      
        return $treffer[1].''.ucwords(trim($treffer[3]));
        }
      $text = preg_replace_callback('/(.*?)( )(.*?)/','grossmachen', $text);
      ergibt --> Testwort

      b)
      Code:
      function grossmachen($treffer) {
      
        return ucwords(trim($treffer[3]));
        }
      $text = preg_replace_callback('/(.*?)( )(.*?)/','grossmachen', $text);
      ergibt --> TestWort

      c)
      Gesucht ist jedoch:
      Test Wort
      (2. Wort abgestrennt und gross)

      Was ist da falsch?
      Zuletzt geändert von janein; 22.11.2007, 19:48.

      Kommentar


      • #4
        Den zweiten Treffer musst du dann auch ankleben:
        PHP-Code:
        function grossmachen($treffer) {

          return 
        $treffer[1].$treffer[2].ucwords(trim($treffer[3]));
          }
        $text preg_replace_callback('/(.*?)( )(.*?)/','grossmachen'$text); 
        Oder sehe ich das falsch?

        Kommentar


        • #5
          Versuche es mal hiermit:
          PHP-Code:
          function upper($matches) {
              return 
          strtoupper($matches[0]);
          }
          $text preg_replace_callback('/(?<=&nbsp;)[a-z]/''upper'$text); 
          Wenn du die &amp;nbsp; nicht unbedingt erhalten mußt, geht aber auch so:
          PHP-Code:
          $text ucwords(str_replace('&nbsp;'' '$text)); 

          Kommentar


          • #6
            Original geschrieben von onemorenerd
            [B]Versuche es mal hiermit:
            PHP-Code:
            function upper($matches) {
                return 
            strtoupper($matches[0]);
            }
            $text preg_replace_callback('/(?<=&nbsp;)[a-z]/''upper'$text); 
            Damit geht es. Vielen, vielen Dank!
            Sieht einfach aus. Da ich jedoch eine Menge probiert habe, ohne eine Lösung gefunden zu haben, weiß ich das es nicht ganz ohne ist ...

            Du suchst also nur nach dem halben String (Test&nbsp;wort)

            Die RegExp verstehe ich nicht ganz. Was bedeutet "<="?
            Code:
            (?<=&nbsp;)
            Ich suche schon lange ein gutes RegEx Howto oder gute Beispiele mit Erklärungen. Hast Du evt. einen Tipp?

            Kommentar


            • #7
              (?<=foo) ist eine positive lookbehind assertion.

              Alles was ich über RegEx weiß, habe ich aus dem PHP-Manual, Kapitel PCRE. Zum Testen eignen sich http://regexp-evaluator.de/ und http://www.rexv.org/, wobei da natürlich keine Callbacks möglich sind. Achja, der regexp-evaluator hat auch ein Tutorial.

              Kommentar

              Lädt...
              X