我想替换任何包含两个大写字母的单词
这里是字符串
jennie-garth-jennie-garth-inner-city-arts-gala-october-17-2012-If9aSpTW
jennie-garth-jennie-garth3892-H9rDcbY
我想用-
替换- if9asptw这些-If9aSpTW
变化,所以我不能使用str_replace
。我只能识别一个单词中的两个大写字母。这些单词位于末尾,但这些类型的单词占数据库总值的20%,因此我无法替换所有的最后单词。
str_replace
是上下文不知道的,也不能使用substr
,因为您需要检查文本的最后一个非连字符块中的2个大写字母。所以你真的必须坚持preg_replace
基于正则表达式的替换。
您可以使用以下正则表达式:
preg_replace('/-(?:[^-]*[A-Z]){2,}[^-]*$/', '', $str);
参见regex演示。
模式匹配:
-
-
-连字符 -
(?:[^-]*[A-Z]){2,}
- 2个或更多的序列出现(由于{2,}
限制量词):-
[^-]*
-
[A-Z]
-大写
-
-
[^-]*
--
以外的零个或多个字符 -
$
-字符串 结束
$str = 'jennie-garth-jennie-garth-inner-city-arts-gala-october-17-2012-If9aSpTWe';
echo preg_replace('/-(?:[^-]*[A-Z]){2,}[^-]*$/', '', $str);