简体   繁体   中英

regex to replace any word with two capital letters

I want to replace any word which contains two capital letters .

here is my string

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

i want to replace -If9aSpTW with -

These -If9aSpTW varies so I can't use str_replace . I can identify with only two capital letter in one word. These words are at the end, but these types of words are appearing for 20% of total database values so I can't replace all last words.

The str_replace is context unaware, nor can you use substr since you need to check for 2 uppercase letters in the last non-hyphen chunk of the text. So you really have to stick to preg_replace regex based replacement.

You may use the following regex:

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

See the regex demo .

The pattern matches:

  • - - a hyphen
  • (?:[^-]*[AZ]){2,} - 2 or more occurrences (due to {2,} limiting quantifier) of a sequence of:
    • [^-]*
    • [AZ] - an uppercase
  • [^-]* - zero or more chars other than -
  • $ - end of string

PHP :

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM