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

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • 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?
    Last edited by janein; 22-11-2007, 17:28.

  • #2
    preg_replace_callback()

    Comment


    • #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?
      Last edited by janein; 22-11-2007, 18:48.

      Comment


      • #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?

        Comment


        • #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)); 

          Comment


          • #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?

            Comment


            • #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.

              Comment

              Working...
              X