PHP preg匹配只存储大写字母,字符串中的任何位置


PHP preg match to store only capitalised letters, anywhere in string

我使用的是API,在那里我会收到错误消息,例如:

{"message":"Contact is suppressed. ERROR_CONTACT_SUPPRESSED"}

我试图将这些错误消息转换成某种值或代码,这样我就可以向用户提供良好的响应,而不仅仅是一般的错误。

在这个错误中,我能看到的唯一一件事总是正确的,那就是最后一部分被资本化了。例如CCD_ 1或CCD_。

我知道preg_match可以用来获得大写字符,但我相信它们也必须从开头或结尾在一定的字符顺序/数量内。我怎样才能只取回大写部分?

我发现了以下内容,但刚刚得到0的结果,这显然是不正确的

$result = preg_match("/^([A-Z]+)/", $result);
echo $result . '<br />';

使用此:

if(preg_match('/[A-Z_]*/', $string, $matches)) {
    var_dump($matches);
}

请阅读preg_match的文档。函数不会像您预期的那样返回匹配的字符串:

如果模式与给定主题匹配,则preg_match()返回1;如果不匹配,则返回0;如果发生错误,则返回FALSE。

试试这个:

if(preg_match('/[A-Z_]+[^a-z]/', $string, $matches)) {
    var_dump($matches);
}

它将忽略单词开头的大写字母。

尝试以这种方式使用preg_match

$str = '{"message":"Contact is suppressed. ERROR_CONTACT_SUPPRESSED"}';
preg_match("/([A-Z_]+)(?='")/", $str, $match);
echo $result = $match[0] . '<br />';

之前模式不匹配的原因主要是因为你在行的开头指示匹配[A-Z],但它不是=!(^[A-Z])。您还需要指出存在的其他字符,其中包括下划线。