How can I replace a set of words that look like:
SomeText
to
Some_Text
?
How can I replace a set of words that look like:
SomeText
to
Some_Text
?
This can easily be achieved using a regular expression:
$result = preg_replace('/\B([A-Z])/', '_$1', $subject);
a brief explanation of the regex:
Then we replace with '_$1' which means replace the match with an [underscore + backreference 1]
Some_Text and Some_Other_Text and s_O_M_Em_O_R_Et_E_X_T
for SomeText and SomeOtherText and sOMEmOREtEXT
. Are you OK with it? –
Nictitate $s1 = "ThisIsATest";
$s2 = preg_replace("/(?<=[a-zA-Z])(?=[A-Z])/", "_", $s1);
echo $s2; // "This_Is_A_Test"
Explanation:
The regex uses two look-around assertions (one look-behind and one look-ahead) to find spots in the string where an underscore should be inserted.
(?<=[a-zA-Z]) # a position that is preceded by an ASCII letter
(?=[A-Z]) # a position that is followed by an uppercase ASCII letter
The first assertion makes sure that no underscore is inserted at the start of the string.
The simplest way to do this is with a regular expression replacement.
For example:
substr(preg_replace('/([A-Z])/', '_$1', 'SomeText'),1);
The substr call there is to remove a leading '_'
$result = strtolower(preg_replace('/(.)([A-Z])/', '$1_$2', $subject));
Converts:
HelloKittyOlolo
Declaration
CrabCoreForefer
TestTest
testTest
To:
hello_kitty_ololo
declaration
crab_core_forefer
test_test
test_test
<?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
?>
© 2022 - 2024 — McMap. All rights reserved.