Chinaunix首页 | 论坛 | 博客
  • 博客访问: 49209
  • 博文数量: 20
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 255
  • 用 户 组: 普通用户
  • 注册时间: 2014-09-19 14:01
文章分类

全部博文(20)

文章存档

2014年(20)

我的朋友

分类: PHP

2014-09-26 16:31:21

自己在看到这个问题的时候,想到的是用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) . '
';
 


答案2:


 代码如下 复制代码 
echo strtolower(preg_replace('/((?<=[a-z])(?=[A-Z]))/', '_', $str)).'
';
 


那反过来下划线分割字符串转换成驼()峰式字符串怎么搞呢


 代码如下 复制代码 
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()
    }
}
 
from:
阅读(1470) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~