正则表达式用两个大写字母替换任何单词

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);

参见 the regex demo

模式匹配:

  • - - 一个连字符
  • (?:[^-]*[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);