如何删除字符串中的所有非大写字符?

时间:2017-07-06 13:21:15

标签: php regex preg-replace uppercase

是的,我基本上只是试图将Social Inc.David Jason这样的词组分解为SIDJ。我尝试使用爆炸,但无法弄清楚如何爆炸大写字母BUT,我是否需要使用preg_match()

6 个答案:

答案 0 :(得分:6)

您可以将此正则表达式(?![A-Z]).preg_replace()一起使用,以替换除大写字母之外的所有字符。

preg_replace("/(?![A-Z])./", "", $yourvariable)

正则表达式会查找任何 NOT 大写字母(?!否定前瞻)。
如果您希望在其他情况下进行测试,我已经创建了regex101

答案 1 :(得分:4)

快速简便:

$ucaseletters = preg_replace('/[^A-Z]/', '', $input);

这将取代范围A-Z内不是大写字母的所有内容。

说明:

^ within [] (Character-Set) is the negation-Operator (=anything that is NOT...)

答案 2 :(得分:1)

尼古拉斯和伯恩哈德提供了成功的正则表达式模式,但它们并不像它们那样高效。

使用/[^A-Z]+/和带有preg_replace()的空替换字符串。

否定的字符类有一个或多个量词,因此匹配的子字符串越长,需要的替换次数越少。

这也是与preg_split一起使用的最佳模式,但preg_split会生成一个数组,因此还有一个调用implode的额外步骤。

答案 3 :(得分:-1)

我有一个更复杂的解决方案,但它也有效!

$s = str_split("Social Inc.");
foreach ($s as $idx => $char) {
    if(preg_match("/[A-Z]/", $char))
    {
        echo $char;
    }
}

它将echo大写字母。

答案 4 :(得分:-1)

你也可以使用preg_split php函数和regx

$pieces = preg_split('/(?=[A-Z])/',$str);

答案 5 :(得分:-3)

以下是您需要做的事情:

$str = explode(' ', $ster);
$newStr = strtoupper($str[0][0] . $str[1][0]);