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

时间:2016-09-29 06:01:12

标签: php preg-replace

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

这是我的字符串

jennie-garth-jennie-garth-inner-city-arts-gala-october-17-2012-If9aSpTW
jennie-garth-jennie-garth3892-H9rDcbY 

我想用 -

替换-If9aSpTW

这些-If9aSpTW各不相同,因此我无法使用str_replace。我只能用一个单词中的两个大写字母来识别。这些单词结尾,但这些类型的单词出现在总数据库值的20%,所以我无法替换所有的最后一个单词。

1 个答案:

答案 0 :(得分:3)

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