Reputation: 443
I want to replace any word which contains two capital letters .
here is my string
jennie-garth-jennie-garth-inner-city-arts-gala-october-17-2012-If9aSpTW
jennie-garth-jennie-garth3892-H9rDcbY
i want to replace -If9aSpTW with -
These -If9aSpTW
varies so I can't use str_replace
. I can identify with only two capital letter in one word. These words are at the end, but these types of words are appearing for 20% of total database values so I can't replace all last words.
Upvotes: 1
Views: 367
Reputation: 626903
The str_replace
is context unaware, nor can you use substr
since you need to check for 2 uppercase letters in the last non-hyphen chunk of the text. So you really have to stick to preg_replace
regex based replacement.
You may use the following regex:
preg_replace('/-(?:[^-]*[A-Z]){2,}[^-]*$/', '', $str);
See the regex demo.
The pattern matches:
-
- a hyphen(?:[^-]*[A-Z]){2,}
- 2 or more occurrences (due to {2,}
limiting quantifier) of a sequence of:
[^-]*
[A-Z]
- an uppercase [^-]*
- zero or more chars other than -
$
- end of stringPHP:
$str = 'jennie-garth-jennie-garth-inner-city-arts-gala-october-17-2012-If9aSpTWe';
echo preg_replace('/-(?:[^-]*[A-Z]){2,}[^-]*$/', '', $str);
Upvotes: 3