Wie Text in (Klammern) entfernen?
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
array
ausnahme
code
cowboy
ecke
header
hut
klammern
regel
rund code
rund res
rund string
string
teil
text
type
umwandeln
unterschied
url
vier
-
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()
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
<?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 -
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 -
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
-
tela schrieb:
Der Unterschied ist, dass ich den Backslash escaped habe so wie man das eigentlich auch machen sollte, fabo aber nicht, da er sowieso in
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?
steht wo nur'
und\\
ausgewertet wird... es macht hier also gar keinen Unterschied.\'
tela schrieb:
Dann eben ein neuer Code:
... 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<?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, ...). -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage