php 把駝峰樣式的字串轉換成下劃線樣式的字串

2022-05-15 10:29:42 字數 2124 閱讀 3143

1、如何在php中把駝峰樣式的字串轉換成下劃線樣式的字串。例:輸入是foobar的話,輸出則是foo_bar

以下是用正則的方式去完成,既然用到正則,方法肯定就不只一種,我們看下下面的方式

echo strtolower(preg_replace('/(?<=[a-z])([a-z])/', '_$1', 'foobar'));

//output:foo_bar

echo "

";echo strtolower(preg_replace('/(?<=[a-z])([a-z])/', '_$1', 'foo'));

//output:foo

echo "

";echo strtolower(preg_replace('/(?<=[a-z])([a-z])/', '_$1', 'foobarb'));

//output:foo_bar_b

echo "

";

下面我們來解釋下,上面正則的意思。具體正則的基本知識,這裡篇幅有限就不具體介紹了,文章末尾會放出幾篇寫的比較好的正規表示式的文章。

上面的正則裡面主要用到了正規表示式中的環視邊界匹配的語法。具體定義如下(摘抄):

環視的字面意思就是左右看看,需要左右符合一些條件,本質上,它也是匹配邊界,對邊界有一些要求,這個要求是針對左邊或右邊的字串的,根據要求不同,分為四種環視:

可以看出,環視也使用括號(),不過,它不是分組,不占用分組編號。

繼續回到我們上面的正規表示式,第乙個小括號(?<=[a-z]),這是肯定逆序環視的語法,要求匹配的字串的左邊必須有小寫的字母。第二個小括號則是乙個分組,匹配大寫的字母,注意正則中的分組編號是從1開始的,這和我們傳統程式設計下標一般是從0開始不同。而第乙個小括號本身就是語法,其不占用分組編號,所以後面的$1,則是匹配的第二個小括號中的內容,並將其前面新增乙個_符號,最後再整體將整個字串轉換成小寫。

既然我們已經能把駝峰法轉為下劃線的樣式了,如果反過來又該怎辦呢?

2、如何在php中把下劃線樣式的字串轉換成駝峰樣式的字串。例:輸入是foo_bar的話,輸出則是foobar

$str = preg_replace_callback('/_+([a-z])/',function($matches),'foo_bar');

echo $str; //foobar

echo "

";$str = preg_replace_callback('/_+([a-z])/',function($matches),'foo');

echo $str; //foo

echo "

";$str = preg_replace_callback('/_+([a-z])/',function($matches),'foo_bar_b');

echo $str; //foobarb

echo "

";

這裡我們用到了preg_replace_callback函式,該函式執行乙個正規表示式搜尋並且使用乙個**進行替換。換言之,就是第乙個引數是正規表示式,第二個引數是乙個匹配到結果的**函式,第三個引數是需要匹配的字串。注意,**函式具體什麼時候呼叫,是每次匹配到結果則呼叫,呼叫次數不只為一次,匹配不到則不呼叫。並且該**函式的引數是匹配的結果,$matches[0]是完整的匹配,$matches[1]是第乙個捕獲子組的匹配,以此類推。且**函式需要把更改的結果return出去,不然則忽略捕獲的字串

正規表示式比較簡單,這裡就不具體分析了。

正則速查表

下面,我們用**的形式簡要彙總下正規表示式的語法。

正規表示式30分鐘入門教程

電腦程式的思維邏輯 (88) - 正規表示式 (上)

把字串轉換成整數

題目 輸入乙個表示整數的字串,把該字串轉換成整數並輸出。例如輸入字串 345 則輸出整數345 分析 這道題儘管不是很難,學過c c 語言一般都能實現基本功能,但不同程式設計師就這道題寫出的 有很大區別,可以說這道題能夠很好地反應出程式設計師的思維和程式設計習慣,因此已經被包括微軟在內的多家公司用作...

把字串轉換成整數

題目 輸入乙個表示整數的字串,把該字串轉換成整數並輸出。例如輸入字串 345 則輸出整數 345。分析 這道題儘管不是很難,學過c c 語言一般都能實現基本功能,但不同程式設計師就這道題寫出的 有很大區別,可以說這道題能夠很好地反應出程式設計師的思維和程式設計習慣,因此已經被包括微軟在內的多家公司用...

把字串轉換成整數

題目 輸入乙個表示整數的字串,把該字串轉換成整數並輸出。例如輸入字串 345 則輸出整數 345。分析 這道題儘管不是很難,學過 c c 語言一般都能實現基本功能,但不同程式設計師就這道題寫出的 有很大區別,可以說這道題能夠很好地反應出程式設計師的思維和程式設計習慣,因此已經被包括微軟在內的多家公司...