i.e.
$text = 'remove this text (keep this text and 123)'; echo preg_replace('', '', $text); It should output:
(keep this text and 123) i.e.
$text = 'remove this text (keep this text and 123)'; echo preg_replace('', '', $text); It should output:
(keep this text and 123) Take anything found within the brackets, put it in a capture group and keep that only, like this:
echo preg_replace('/^.*(\(.*\)).*$/', '$1', $text); This will do it: (and works with nested () as well)
$re = '/[^()]*+(\((?:[^()]++|(?1))*\))[^()]*+/'; $text = preg_replace($re, '$1', $text); Here are a couple test cases:
Input: Non-nested case: 'remove1 (keep1) remove2 (keep2) remove3' Nested case: 'remove1 ((keep1) keep2 (keep3)) remove2' Output: Non-nested case: '(keep1)(keep2)' Nested case: '(keep1) keep2 (keep3)' Here the 'non preg_replace' way:
<? $text = 'remove this text (keep this text)' ; $start = strpos($text,"(") ; $end = strpos($text,")") ; echo substr($text,$start+1,$end-$start-1) ; // without brackets echo substr($text,$start,$end-$start+1) ; // brackets included ?> Note:
- This extracts only the first pair of brackets.
- Replace strpos() with of strrpos() to get the last pair of brackets.
- Nested brackets cause trouble.