Использование функции preg_replace для получения первых символов после подчеркивания (PHP) - PullRequest
0 голосов
/ 21 ноября 2019

Я хочу получить все первые символы строки с подчеркиванием.

, например:

Input: hello_this_is_test Output: HTIT

Возможно ли это сделать с помощью регулярных выражений и функции замены?

Вот чего я хочу достичь:

<?php
$string = 'hello_this_is_test';
$pattern = '...'; 
$replacement = '';
echo strtoupper(preg_replace($pattern, $replacement, $string));
?>

Что мне не хватает, так это шаблон. Любой может помочь мне через это, пожалуйста!

Спасибо.

Ответы [ 4 ]

3 голосов
/ 21 ноября 2019

Вот альтернатива без регулярных выражений, но вместо этого explode с последующим implode возвращением после сохранения только первых букв с использованием array_map:

$string = 'hello_this_is_test';

$string_parts = explode('_', $string);
$first_chars = array_map(static function ($part) { return $part[0] ?? ''; }, $string_parts);
echo strtoupper(implode('', $first_chars));

Демонстрация: https://3v4l.org/bbSrH

1 голос
/ 21 ноября 2019

Вы хотите удалить от второй буквы до следующего встречающегося подчеркивания или конца, если строка.

\K будет совпадать и выпускать первую букву в последовательности, затем оставьте следующие символы длябыть удаленным.

Код: ( PHP Demo ) ( Regex101 Demo )

$string = 'hello_this_is_test';
echo strtoupper(preg_replace('~[a-z]\K[^_]*_?~', '', $string));

Вывод:

HTIT
0 голосов
/ 21 ноября 2019

Вы также можете использовать preg_match_all, чтобы найти все символы, начинающие слова, используя положительный взгляд назад либо для начала строки, либо для _, а затем в верхнем регистре implode всехсовпадения:

$string = 'hello_this_is_test';
preg_match_all('/(?<=_|^)(.)/', $string, $matches);
echo strtoupper(implode('', $matches[1]));

Вывод:

HTIT

Демонстрация на 3v4l.org

0 голосов
/ 21 ноября 2019

Попробуйте использовать preg_replace со следующим шаблоном:

(\w)[^_]*?(?:_|$)

, а затем замените только первой группой захвата.

$string = 'hello_this_is_test';
$output = strtoupper(preg_replace("/(\w)[^_]*?(?:_|$)/", "$1", $string));
echo $output;

Это напечатает:

HTIT
...