Создание верхней строчной маски

Я работаю над приложением поиска синонимов, и мне нужно создать строчную маску верхнего регистра.

Пример:

Word »Конвертировать все строчные буквы» Найти синоним »Конвертировать каждый символ нового слова обратно в оригинальные прописные буквы

TabLe »стол» письменный стол »DesK

Поиск синонимов — это отдельная функция, поэтому я не могу напрямую использовать preg_replace, потому что мне нужно добавить это слово в нижний регистр в функцию.

Я думаю о создании маски как «TabLe = ULLUL» (U: верхний — L: нижний) и затем назначьте его новому закрученному слову «ULLU = DesK», как показано в примере выше.

Как мне этого добиться?

Если вы думаете, что есть гораздо более простой способ сделать это, кроме маскировки верхних и нижних регистров, я открыт для советов.

Заранее спасибо.

0

Решение

Предполагая, что у вас есть эти переменные:

$txt = 'TabLe';
$new = 'desk';  // result of your “Find synonym” function

ты можешь использовать preg_match_all с PREG_OFFSET_CAPTURE флаг, чтобы получить все $txt смещение в верхнем регистре:

preg_match_all( '~[A-Z]~', $txt, $matches, PREG_OFFSET_CAPTURE );
$toUpper = array_column( $matches[0], 1);

Сейчас в $toUpper массив у вас есть все прописные позиции:

Array
(
[0] => 0
[1] => 3
)

На данный момент вы можете изменить относительный $new случаи:

foreach( $toUpper as $key )
{
if( !$new[$key] ) break; // break if synonym len < original text len
$new = substr( $new,0,$key ) . strtoupper( $new[$key] ) . substr( $new, $key+1 );
}

Результат:

DesK
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]