Я работаю над приложением поиска синонимов, и мне нужно создать строчную маску верхнего регистра.
Пример:
Word »Конвертировать все строчные буквы» Найти синоним »Конвертировать каждый символ нового слова обратно в оригинальные прописные буквы
TabLe »стол» письменный стол »DesK
Поиск синонимов — это отдельная функция, поэтому я не могу напрямую использовать preg_replace, потому что мне нужно добавить это слово в нижний регистр в функцию.
Я думаю о создании маски как «TabLe = ULLUL» (U: верхний — L: нижний) и затем назначьте его новому закрученному слову «ULLU = DesK», как показано в примере выше.
Как мне этого добиться?
Если вы думаете, что есть гораздо более простой способ сделать это, кроме маскировки верхних и нижних регистров, я открыт для советов.
Заранее спасибо.
Предполагая, что у вас есть эти переменные:
$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
Других решений пока нет …