PHP實(shí)現(xiàn)駝峰樣式字符串(首字母大寫(xiě))轉(zhuǎn)換成下劃線樣式字符串的方法示例
本文實(shí)例講述了PHP實(shí)現(xiàn)駝峰樣式字符串(首字母大寫(xiě))轉(zhuǎn)換成下劃線樣式字符串的方法。分享給大家供大家參考,具體如下:
1、如何在php中把駝峰樣式的字符串轉(zhuǎn)換成下劃線樣式的字符串。例:輸入是FooBar的話,輸出則是foo_bar
以下是用正則的方式去完成,既然用到正則,方法肯定就不只一種,我們看下下面的方式
echo strtolower(preg_replace('/(?<=[a-z])([A-Z])/', '_$1', 'fooBar'));
//output:foo_bar
echo "<br>";
echo strtolower(preg_replace('/(?<=[a-z])([A-Z])/', '_$1', 'foo'));
//output:foo
echo "<br>";
echo strtolower(preg_replace('/(?<=[a-z])([A-Z])/', '_$1', 'fooBarB'));
//output:foo_bar_b
echo "<br>";
下面我們來(lái)解釋下,上面正則的意思。具體正則的基本知識(shí),這里篇幅有限就不具體介紹了,文章末尾會(huì)附帶幾篇總結(jié)的比較好的正則表達(dá)式的文章。
上面的正則里面主要用到了正則表達(dá)式中的環(huán)視邊界匹配的語(yǔ)法。具體定義如下(摘抄):
環(huán)視的字面意思就是左右看看,需要左右符合一些條件,本質(zhì)上,它也是匹配邊界,對(duì)邊界有一些要求,這個(gè)要求是針對(duì)左邊或右邊的字符串的,根據(jù)要求不同,分為四種環(huán)視:
肯定順序環(huán)視,語(yǔ)法是(?=...),要求右邊的字符串匹配指定的表達(dá)式,比如表達(dá)式abc(?=def),(?=def)在字符c右面,即匹配c右面的邊界,對(duì)這個(gè)邊界的要求是,它的右邊有def,比如abcdef,如果沒(méi)有,比如abcd,則不匹配;
否定順序環(huán)視,語(yǔ)法是(?!...),要求右邊的字符串不能匹配指定的表達(dá)式,比如表達(dá)式s(?!ing),匹配一般的s,但不匹配后面有ing的s;
肯定逆序環(huán)視,語(yǔ)法是(?<=...),要求左邊的字符串匹配指定的表達(dá)式,比如表達(dá)式(?<=\s)abc,(?<=\s)在字符a左邊,即匹配a左邊的邊界,對(duì)這個(gè)邊界的要求是,它的左邊必須是空白字符;
否定逆序環(huán)視,語(yǔ)法是(?<!...),要求左邊的字符串不能匹配指定的表達(dá)式,比如表達(dá)式(?<!\w)cat,(?<!\w)在字符c左邊,即匹配c左邊的邊界,對(duì)這個(gè)邊界的要求是,它的左邊不能是單詞字符。
可以看出,環(huán)視也使用括號(hào)(),不過(guò),它不是分組,不占用分組編號(hào)。
繼續(xù)回到我們上面的正則表達(dá)式,第一個(gè)小括號(hào)(?<=[a-z]),這是肯定逆序環(huán)視的語(yǔ)法,要求匹配的字符串的左邊必須有小寫(xiě)的字母。第二個(gè)小括號(hào)則是一個(gè)分組,匹配大寫(xiě)的字母,注意正則中的分組編號(hào)是從1開(kāi)始的,這和我們傳統(tǒng)編程下標(biāo)一般是從0開(kāi)始不同。而第一個(gè)小括號(hào)本身就是語(yǔ)法,其不占用分組編號(hào),所以后面的$1,則是匹配的第二個(gè)小括號(hào)中的內(nèi)容,并將其前面添加一個(gè)_符號(hào),最后再整體將整個(gè)字符串轉(zhuǎn)換成小寫(xiě)。
既然我們已經(jīng)能把駝峰法轉(zhuǎn)為下劃線的樣式了,如果反過(guò)來(lái)又該怎辦呢?
2、如何在php中把下劃線樣式的字符串轉(zhuǎn)換成駝峰樣式的字符串。例:輸入是foo_bar的話,輸出則是FooBar
$str = preg_replace_callback('/_+([a-z])/',function($matches){
print_r($matches); //Array ( [0] => _b [1] => b )
return strtoupper($matches[1]);
},'foo_bar');
echo $str; //fooBar
echo "<br>";
$str = preg_replace_callback('/_+([a-z])/',function($matches){
return strtoupper($matches[1]);
},'foo');
echo $str; //foo
echo "<br>";
$str = preg_replace_callback('/_+([a-z])/',function($matches){
return strtoupper($matches[1]);
},'foo_bar_b');
echo $str; //fooBarB
echo "<br>";
這里我們用到了preg_replace_callback函數(shù),該函數(shù)執(zhí)行一個(gè)正則表達(dá)式搜索并且使用一個(gè)回調(diào)進(jìn)行替換。換言之,就是第一個(gè)參數(shù)是正則表達(dá)式,第二個(gè)參數(shù)是一個(gè)匹配到結(jié)果的回調(diào)函數(shù),第三個(gè)參數(shù)是需要匹配的字符串。注意,回調(diào)函數(shù)具體什么時(shí)候調(diào)用,是每次匹配到結(jié)果則調(diào)用,調(diào)用次數(shù)不只為一次,匹配不到則不調(diào)用。并且該回調(diào)函數(shù)的參數(shù)是匹配的結(jié)果,是完整的匹配,matches[0]是完整的匹配,matches[1]是第一個(gè)捕獲子組的匹配,以此類推。且回調(diào)函數(shù)需要把更改的結(jié)果return出去,不然則忽略捕獲的字符串
正則表達(dá)式比較簡(jiǎn)單,這里就不具體分析了。
正則速查表 http://www.dbjr.com.cn/article/67634.htm
詳細(xì)的正則表達(dá)式語(yǔ)法可參考:
正則表達(dá)式30分鐘入門教程 http://www.dbjr.com.cn/tools/zhengze.html
PS:這里再為大家提供2款非常方便的正則表達(dá)式工具供大家參考使用:
JavaScript正則表達(dá)式在線測(cè)試工具:
http://tools.jb51.net/regex/javascript
正則表達(dá)式在線生成工具:
http://tools.jb51.net/regex/create_reg
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php正則表達(dá)式用法總結(jié)》、《PHP數(shù)組(Array)操作技巧大全》、《PHP基本語(yǔ)法入門教程》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫(kù)操作入門教程》及《php常見(jiàn)數(shù)據(jù)庫(kù)操作技巧匯總》
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。
- Java 駝峰命名法詳解(必看篇)
- js寫(xiě)一個(gè)字符串轉(zhuǎn)成駝峰的實(shí)例
- php把大寫(xiě)命名轉(zhuǎn)換成下劃線分割命名
- php將字符串全部轉(zhuǎn)換成大寫(xiě)或者小寫(xiě)的方法
- php實(shí)現(xiàn)字符串首字母轉(zhuǎn)換成大寫(xiě)的方法
- php實(shí)現(xiàn)字符串首字母大寫(xiě)和單詞首字母大寫(xiě)的方法
- php ucwords() 函數(shù)將字符串中每個(gè)單詞的首字符轉(zhuǎn)換為大寫(xiě)(實(shí)現(xiàn)代碼)
- php 將字符串按大寫(xiě)字母分隔成字符串?dāng)?shù)組
相關(guān)文章
PHP static局部靜態(tài)變量和全局靜態(tài)變量總結(jié)
使用靜態(tài)局部變量的原因是它不能被外部使用,但是它的值依然在沒(méi)此使用后保留。雖然使用全局變量可以實(shí)現(xiàn)相同的功能,但是它經(jīng)常會(huì)造成意外2014-03-03
php計(jì)算函數(shù)執(zhí)行時(shí)間的方法
這篇文章主要介紹了php計(jì)算函數(shù)執(zhí)行時(shí)間的方法,以md5函數(shù)加密運(yùn)行時(shí)間為例分析了php計(jì)算函數(shù)運(yùn)行時(shí)間的技巧,需要的朋友可以參考下2015-03-03
關(guān)于使用key/value數(shù)據(jù)庫(kù)redis和TTSERVER的心得體會(huì)
本篇文章是對(duì)使用key/value數(shù)據(jù)庫(kù)redis和TTSERVER的心得體會(huì)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
PHP 將dataurl轉(zhuǎn)成圖片image方法總結(jié)
這篇文章主要介紹了PHP 將dataurl轉(zhuǎn)成圖片image方法的相關(guān)資料,這里提供了兩種方法及實(shí)現(xiàn)方式,需要的朋友可以參考下2016-10-10
PHP得到mssql的存儲(chǔ)過(guò)程的輸出參數(shù)功能實(shí)現(xiàn)
在開(kāi)發(fā)過(guò)程中可能會(huì)遇到無(wú)法取得MSSQL存儲(chǔ)過(guò)程的輸出參數(shù),很多朋友都不知道該怎么辦,本文將詳細(xì)介紹PHP得到mssql的存儲(chǔ)過(guò)程的輸出參數(shù)功能實(shí)現(xiàn)2012-11-11
基于PHP實(shí)現(xiàn)短信驗(yàn)證碼發(fā)送次數(shù)限制
這篇文章主要介紹了基于PHP實(shí)現(xiàn)短信驗(yàn)證碼發(fā)送次數(shù)限制,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07
解析PHP將對(duì)象轉(zhuǎn)換成數(shù)組的方法(兼容多維數(shù)組類型)
本篇文章是對(duì)PHP將對(duì)象轉(zhuǎn)換成數(shù)組的方法(兼容多維數(shù)組類型)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06

