正则表达式用两个大写字母替换任何单词
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);
我想替换任何包含两个大写字母的单词。
这是我的字符串
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);