在PHP中,用你認為最簡潔的方法把駝峰樣式的字符串轉(zhuǎn)換成下劃線樣式的字符串,例:輸入是FooBar的話,輸出則是foo_bar.
自己在看到這個問題的時候,想到的是用ASCII碼來處理,沒往萬能的正則上去想,好吧,下面來看看答案.
答案1,代碼如下:
- $str = 'OpenAPI';
- $length = mb_strlen($str);
- $new = '';
- for($i = 0; $i < $length; $i++)
- {
- $num = ord($str[$i]);
- $pre = ord($str[$i - 1]);
- $new .= ($i != 0 && ($num >= 65 && $num <= 90) && ($pre >= 97 && $pre <= 122)) ? "_{$str[$i]}" : $str[$i];
- }
- echo strtolower($new) . '<br>';
答案2,代碼如下:
echo strtolower(preg_replace('/((?<=[a-z])(?=[A-Z]))/', '_', $str)).'<br>';
那反過來下劃線分割字符串轉(zhuǎn)換成駝峰式字符串怎么搞呢,代碼如下:
- f = new File("d:/temp/t.txt")
- if(f.exists()){
- f.eachLine{ line->
- line = line.trim()
- String[] elems = line.split('_')
- for(int i = 0; i < elems.length; i++){
- elems[i] = elems[i].toLowerCase()
- if(i != 0){
- String elem = elems[i]
- char first = elem[0] as char
- elems[i] = "" + (char)(first - 32) + elem.substring(1)
- }
- }
- println elems.join()
- }
- }
新聞熱點
疑難解答