kostenloser Webspace werbefrei: lima-city


Wie Text in (Klammern) entfernen?

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    tela

    tela hat kostenlosen Webspace.

    Hallo

    wenn ich einen String habe wie:

    $string = 'mein Hut (Cowboy Hut) der hat keine vier Ecken (sondern) er ist rund';


    wie bekomme ich daraus alles was im Klammern steht raus, so dass übrig bleibt:

    $string = 'mein Hut der hat keine vier Ecken er ist rund';


    kann man in str_replace() auch direkt mit (regex) Pattern arbeiten ?
    oder (idee) alle Teil-Strings in Klammern (inkl. der Klammern) in Array holen (preg_match)
    und dann dieses Array durch str_replace() jagen .. oder gehts direkt mit preg_replace()
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. <?php
    $string = "mein Hut (Cowboy Hut) der hat keine vier Ecken (sondern) er ist rund";
    $string = trim(preg_replace('/\s*\([^)]*\)/', '', $string));
    
    echo $string;
    ?>


    Beitrag zuletzt geändert: 1.9.2012 15:23:11 von fabo
  4. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    In etwa so:
    header('content-type: text/plain');
    $string = 'mein Hut (Cowboy Hut) der hat keine vier Ecken (sondern) er ist rund';
    $regex = '/\\(.*?\\)\\s*/s';
    $result = preg_replace($regex, '', $string);
    
    echo($result);


    // EDIT: fabo war schneller, aber das hier ist eine etwas andere Variante ;-)
  5. Autor dieses Themas

    tela

    tela hat kostenlosen Webspace.

    Vielen Dank

    beide Varianten sind sehr schön,
    vorallem weil auch daran gedacht wurde, nach (bzw. vor) dem Teilstring in Klammern
    auch nocch das - dann - überflussige Leerzeichen zu entfernen :)

    damit ich den preg_replace() nicht auf jeden String anwenden muss,
    werde ich wohl noch prüfen, ob die zwei Zeichen '(' und ')' drin sind

    $px = strpos($string,'('); 
    $py = strpos($string,')'); 
    
    if ($px && $py) { 
    // -- hier der preg_replace
    }


    das ganze jetzt noch als function, dann ist es super

    Variante 1: (von fabo)
    // ---------------------------------------------- 
    
    function klammertext_raus1 ($string) { 
    	
    	$px = strpos($string,'(');
    	$py = strpos($string,')');
    	
    	if ($px && $py) { 
    		$regex1 = '/\s*\([^)]*\)/';
    		$result = trim(preg_replace($regex1, '', $string));
    		return $result; 
    	}
    	else { 
    		return $string; 
    	}
    
    }
    
    // ----------------------------------------------



    Variante 2: (von: hackyourlife)
    // ---------------------------------------------- 
    
    function klammertext_raus2 ($string) { 
    	
    	$px = strpos($string,'(');
    	$py = strpos($string,')');
    	
    	if ($px && $py) { 
    		$regex2 = '/\\(.*?\\)\\s*/s';
    		$result = preg_replace($regex2, '', $string);
    		return $result; 
    	}
    	else { 
    		return $string; 
    	}
    
    }
    
    // ----------------------------------------------


    habe beide Varianten ausprobiert, funktioniert im "Normalfall" wunderbar


    was isch nicht verstehe, warum hackyourlife die Klammern doppelt escaped,
    $regex2 = '/\\(.*?\\)\\s*/s';

    aber bei dem regex von fabo sind die Klammern nur einfach escaped ?!
    $regex1 = '/\s*\([^)]*\)/';


    beides funktioniert, aber warum .. was ist der Unterschied?


    PS:
    ... aber wenn z.B. 2 Smilies :( und ;) im String sind,
    dann verschwindet auch der Text dazwischen ...

    $str = 'mein Hut ist ein Cowboy Hut :( der hat keine vier Ecken :) er ist rund';
    $res = 'mein Hut ist ein Cowboy Hut :er ist rund'


    ist nicht so schlimm, das kommt ja wohl eher selten vor ...
    evtl. muss ich halt Smilies vorher irgendwie umwandeln
    oder ich finde im regex eine Ausnahme-Regel daür

  6. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    tela schrieb:
    was isch nicht verstehe, warum hackyourlife die Klammern doppelt escaped,
    $regex2 = '/\\(.*?\\)\\s*/s';

    aber bei dem regex von fabo sind die Klammern nur einfach escaped ?!
    $regex1 = '/\s*\([^)]*\)/';


    beides funktioniert, aber warum .. was ist der Unterschied?
    Der Unterschied ist, dass ich den Backslash escaped habe so wie man das eigentlich auch machen sollte, fabo aber nicht, da er sowieso in
    '
    steht wo nur
    \\
    und
    \'
    ausgewertet wird... es macht hier also gar keinen Unterschied.

    tela schrieb:
    ... aber wenn z.B. 2 Smilies :( und ;) im String sind,
    dann verschwindet auch der Text dazwischen ...

    $str = 'mein Hut ist ein Cowboy Hut :( der hat keine vier Ecken :) er ist rund';
    $res = 'mein Hut ist ein Cowboy Hut :er ist rund'


    ist nicht so schlimm, das kommt ja wohl eher selten vor ...
    evtl. muss ich halt Smilies vorher irgendwie umwandeln
    oder ich finde im regex eine Ausnahme-Regel daür
    Dann eben ein neuer Code:
    <?php
    
    header('content-type: text/plain');
    
    $regex = '/\\s+\\(.*?\\)\\s+/s';
    
    $string1 = 'mein Hut (Cowboy Hut) der hat keine vier Ecken (sondern) er ist rund';
    $string2 = 'mein Hut ist ein Cowboy Hut :( der hat keine vier Ecken :) er ist rund';
    
    $result1 = preg_replace($regex, ' ', $string1);
    $result2 = preg_replace($regex, ' ', $string2);
    
    echo("$result1\n$result2");
    
    ?>
    Damit jetzt etwas zwischen Klammern entfernt wird muss vor der öffnenden und nach der schließenden Klammer ein Whitespace sein (Leerzeichen, Tab, ...).
  7. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!