PHP - add underscores before capital letters

2019-04-04 00:46发布

How can I replace a set of words that look like:

SomeText

to

Some_Text

?

5条回答
甜甜的少女心
2楼-- · 2019-04-04 01:35

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 '_'

查看更多
Explosion°爆炸
3楼-- · 2019-04-04 01:39
$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.

查看更多
Bombasti
4楼-- · 2019-04-04 01:41

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]

查看更多
倾城 Initia
5楼-- · 2019-04-04 01:41

$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
查看更多
做自己的国王
6楼-- · 2019-04-04 01:42
<?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

?>
查看更多
登录 后发表回答