Regex将任何单词替换为两个大写字母


regex to replace any word with two capital letters

我想替换任何包含两个大写字母的单词

这里是字符串

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] -大写
  • [^-]* - -以外的零个或多个字符
  • $ -字符串
  • 结束
PHP:

$str = 'jennie-garth-jennie-garth-inner-city-arts-gala-october-17-2012-If9aSpTWe';
echo preg_replace('/-(?:[^-]*[A-Z]){2,}[^-]*$/', '', $str);