如何替换一组看起来像的单词:
SomeText
到
Some_Text
答案 0 :(得分:35)
这可以使用正则表达式轻松实现:
$result = preg_replace('/\B([A-Z])/', '_$1', $subject);
正则表达式的简要说明:
然后我们用'_ $ 1'代替,这意味着用[下划线+反向引用1]替换匹配
答案 1 :(得分:9)
$s1 = "ThisIsATest";
$s2 = preg_replace("/(?<=[a-zA-Z])(?=[A-Z])/", "_", $s1);
echo $s2; // "This_Is_A_Test"
说明:
正则表达式使用两个环视断言(一个后视和一个前瞻)来查找字符串中应插入下划线的位置。
(?<=[a-zA-Z]) # a position that is preceded by an ASCII letter
(?=[A-Z]) # a position that is followed by an uppercase ASCII letter
第一个断言确保在字符串的开头没有插入下划线。
答案 2 :(得分:4)
最简单的方法是使用正则表达式替换。
例如:
substr(preg_replace('/([A-Z])/', '_$1', 'SomeText'),1);
那里的substr调用是删除一个前导'_'
答案 3 :(得分:3)
<?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
?>
答案 4 :(得分:3)
$result = strtolower(preg_replace('/(.)([A-Z])/', '$1_$2', $subject));
转换:
HelloKittyOlolo
Declaration
CrabCoreForefer
TestTest
testTest
要:
hello_kitty_ololo
declaration
crab_core_forefer
test_test
test_test