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

Php regex将任何单词替换为两个大写字母,php,preg-replace,Php,Preg Replace,我想替换任何包含两个大写字母的单词 这是我的绳子 jennie-garth-jennie-garth-inner-city-arts-gala-october-17-2012-If9aSpTW jennie-garth-jennie-garth3892-H9rDcbY 我想用-If9aSpTW替换-If9aSpTW 这些-If9aSpTW不同,因此我不能使用str\u replace。我一个词只能用两个大写字母表示。这些单词位于末尾,但这些类型的单词占数据库总值的20%,因此我无法替换所有最

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

这是我的绳子

jennie-garth-jennie-garth-inner-city-arts-gala-october-17-2012-If9aSpTW
jennie-garth-jennie-garth3892-H9rDcbY 
我想用-If9aSpTW替换-If9aSpTW


这些
-If9aSpTW
不同,因此我不能使用
str\u replace
。我一个词只能用两个大写字母表示。这些单词位于末尾,但这些类型的单词占数据库总值的20%,因此我无法替换所有最后的单词。

str\u replace不知道上下文,您也不能使用
substr
,因为您需要在文本的最后一个非连字符块中检查两个大写字母。因此,您必须坚持使用基于正则表达式的替换

您可以使用以下正则表达式:

preg_replace('/-(?:[^-]*[A-Z]){2,}[^-]*$/', '', $str);

模式匹配:

  • -
    -连字符
  • (?:[^-]*[A-Z]){2,}
    -2次或多次出现(由于
    {2,}
    限制量词):
    • [^-]*
    • [A-Z]
      -大写字母
  • [^-]*
    -除
    -
  • $
    -字符串结尾
:


我不知道该怎么办。你有没有考虑过
爆炸(“-”,$val)
然后
内爆
忽略最后一块?或者只是
substr($s,0,strrpos($s,'-')。这可能足够了。您提到这些出现在字符串的末尾,是什么使它们具体化的?不止一个大写字母?好的,试试
$result=preg_replace('/-(?:[^-]*[A-Z]){2,}[^-]*$/',''$str)。请参阅。@WiktorStribiżew yes。我不能盲目地删除所有最后一个字母,因为这些类型的数据只占总行数的20%。所以我只需要删除两个大写字母的单词there@WiktorStribiżew trying………不确定IDEONE现在是否正常工作,至少它显示了正确的结果。@WiktorStribiżew love u
$str = 'jennie-garth-jennie-garth-inner-city-arts-gala-october-17-2012-If9aSpTWe';
echo preg_replace('/-(?:[^-]*[A-Z]){2,}[^-]*$/', '', $str);