PHP - add underscores before capital letters
This can easily be achieved using a regular expression:
$result = preg_replace('/\B([A-Z])/', '_$1', $subject);
a brief explanation of the regex:
- \B asserts position at a word boundary.
- [A-Z] matches any uppercase characters from A-Z.
- () wraps the match in a back reference number 1.
Then we replace with '_$1' which means replace the match with an [underscore + backreference 1]
$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.