PHP - добавить символы подчеркивания перед заглавными буквами
Как заменить набор слов, которые выглядят следующим образом:
SomeText
to
Some_Text
?
Ответы
Ответ 1
Это может быть легко достигнуто с помощью регулярного выражения:
$result = preg_replace('/\B([A-Z])/', '_$1', $subject);
краткое объяснение регулярного выражения:
- \B утверждает положение на границе слова.
- [A-Z] соответствует любым заглавным символам из A-Z.
- () завершает совпадение в обратном ссылочном номере 1.
Затем мы заменяем на "_ $1", что означает замену соответствия на [подчеркивание + обратная ссылка 1]
Ответ 2
$s1 = "ThisIsATest";
$s2 = preg_replace("/(?<=[a-zA-Z])(?=[A-Z])/", "_", $s1);
echo $s2; // "This_Is_A_Test"
Пояснение:
Регулярное выражение использует два утверждения look-around (один внешний вид и один взгляд вперед), чтобы найти точки в строке, в которой должен быть вставлен символ подчеркивания.
(?<=[a-zA-Z]) # a position that is preceded by an ASCII letter
(?=[A-Z]) # a position that is followed by an uppercase ASCII letter
Первое утверждение гарантирует, что подчеркивание не будет вставлено в начале строки.
Ответ 3
Самый простой способ сделать это - заменить регулярное выражение.
Например:
substr(preg_replace('/([A-Z])/', '_$1', 'SomeText'),1);
Вызов substr заключается в удалении ведущего '_'
Ответ 4
<?php
$string = "SomeTestString";
$list = split(",",substr(preg_replace("/([A-Z])/",',\\1',$string),1));
$text = "";
foreach ($list as $value) {
$text .= $value."_";
}
echo substr($text,0,-1); // remove the extra "_" at the end of the string
?>
Ответ 5
$result = strtolower(preg_replace('/(.)([A-Z])/', '$1_$2', $subject));
Преобразование:
HelloKittyOlolo
Declaration
CrabCoreForefer
TestTest
testTest
To:
hello_kitty_ololo
declaration
crab_core_forefer
test_test
test_test