lexus

字符串的取代

将字符串的一部分换成其他的字符串的这种操作称为"取代"。Ruby有sub与gsub这两个方法用来做取代的操作,这两个方法的差异在于sub方法是取代最先找到的地方,而gsub方法会取代所有找到的地方。

关于sub方法与gsub方法,请参见"14.6.1 sub方法与gsub方法"一节的介绍。另外,sub方法与gsub方法还有破坏性的版本sub!方法与gsub!方法,同样在该节进行介绍。

 

 

http://book.51cto.com/art/200902/111862.htm

 

 

12.8.1 查找字符串

http://book.51cto.com  2009-02-26 15:57  博硕文化/柯志杰  电子工业出版社  我要评论(0)

12.8 字符串的查找与取代

一般操作字符串的时候,经常会有"搜寻"或"取代"的需求。Ruby可以很容易地进行字符串查找。

12.8.1  查找字符串

想要检查字符串里是否包含特定的字符串,可以使用index方法或rindex方法。

index方法会从字符串的左边开始查找是否包含实参所指定的字符串,而rindex方法则会从右边开始查找。rindex的"r"是"right(右边)"的意思。

str = "sumomomomomomomomonouchi"
p str.index("momo")       #=> 2
p str.rindex("momo")     #=> 14

index方法与rindex方法在找到字符串的时候,会返回找到处的位置,找不到时则会返回nil。

另外,单纯地想要检查是否包含时,也可以使用include?方法。

str = "sumomomomomomomomonouchi"
p str.include?("momo")     #=> true

若想检查字符串是否包含特定样式时,则需要使用正则表达式。关于样式查找,详见"第14章 正则表达式(Regexp)类"。

另外,有时候不只是想要查找字符串,还想对找到的字符串做某些处理。这时Ruby语言往往可以使用迭代器简单完成,请参考"第20章 迭代器"。

关于换行

换行符是表示文字行返回的特殊记号。前面的12.6节中的专栏"文字编码"一文中已经说到,在计算机中,一般情况下,文字中使用编码的做法是行不通的,使用换行符的做法跟使用编码的做法一样行不通。然而,换行符处理的困难之处主要还在于:不同的OS,换行符也不尽相同。

对一些典型的OS的换行符总结如下。在这里,"LF"(Line Feed)的编码为"0X0a","CR"(Carriage Return)的编码为"0X0d"。

在Ruby中,换行符号为"LF",并在IO#gets方法等实际情况中作为预设行的分隔符。当然,对于Mac OS 9以前标准的文本来说,在Ruby中就会出现"无法识别换行"的问题。

在gets方法中,对可识别的换行符的变更,相对应的方法的有关详情,还请参照17.5节的论述。

 

 

 

 

 

查询是否含有样式(Pattern)

    如果只要查询字符串中是否包含样式的时候,可以使用=~运算符(Regexp#=~)

    #是否包含有空格符或者Tab?
    p(/[ \t]/ =~ "a c")   #=> 1
    p(/[ \t]/ =~ "abc")   #=> nil

查询样式第一次出现的字节位置

    如果想要知道指定样式第一次出现的字节位置的话,可以使用String#index

    p "xxxabcabcabcxxx".index(/abc/)   #=> 3
    p "xxxabcabcabcxxx".index(".")     #=> nil
    p "xxx.........xxx".index(".")     #=> 3

查询样式最后出现的字节位置

    如果想要知道指定样式最后一次出现的字节位置的话,可以使用String#rindex。

    p "xxxabcabcabcxxx".rindex(/abc/)   #=> 9
    p "xxxabcabcabcxxx".rindex(".")     #=> nil
    p "xxx.........xxx".rindex(".")     #=> 11

取得匹配的详细信息

    使用Regexp#match的话,可以取得关于匹配的详细信息(MatchData对象)。我们可以由此对象中取得关于匹配部分的开头、结尾的字节位置,以及匹配部分的字符串等各种信息。String#match也可以取得与Regexp#match同样的结果。

    m = /abc/.match("xxxabcabcabcxxx")
    p m.begin(0)   #=> 3
    p m.end(0)     #=> 6
    p m[0]         #=> "abc"
    p m.post_match  #=> "abcabcxxx"

    m = "xxxabcabcabcxxx".match(/abc/)
    p m.begin(0)   #=> 3
    p m.end(0)     #=> 6
    p m[0]        #=> "abc"
    p m.post_match  #=> "abcabcxxx"

在一个字符串中匹配所有的候选

    到目前为止介绍的方法都只能匹配到在字符串中数个可匹配的开头(或者结尾)部分的其中一个,不过实际上我们也可以让程序去匹配所有符合的部分。这就要使用String#scan方法。

    #匹配所有注音符号
    str = "ㄅ\n aad ㄆㄇ e\ne ㄈ0\n0a ㄍ\n ii ㄚ\n"
    str.scan(/[ㄅ-ㄜ]+/){|s|
        puts s
    }

    #=> ㄅ
    #=> ㄆㄇ
    #=> ㄈ
    #=> ㄍ
    #=> ㄚ

    String#scan在正则表达式中加入“( )”的话,则会改变其动作,请读者要注意。

只处理包含有样式的行

    在一个字符串中包含多行的时候,若要重复处理包含样式的行,则可以使用String#grep(Enumerable#grep)。

    #只处理包含有“快”或“乐”的行
    str = "快\n aad好吃 e\ne 乐 0\n0a 哈\n ii 好\n"
    str.grep([快乐]){|line|
        p line
    }
    #=> "快\n"
    #=> "e 乐 0\n"

    也就是说,下面两个方式是一样的。

    str.gerp(re){|line|
        各行的处理
    }

    str.each{
        if re =~ line
            各行的处理
        end
    }

    说明:Ruby1.6版中String#scan的参数在两个以上字符串的情况下,会变换为Regexp对象之后进行查找,而在Ruby1.8版之后就会直接以该字符串来进行搜索。因此在有Meta字符(“.”及“*”等)的情况下,其运作会有所不同。要避开这个规格的问题,只要一直都使用正则表达式的参数就可以解决。

    String#match在Ruby1.8版之后才被定义。

    在处理多字节字符串的时候,一定要实现设置$KCODE。在这项技巧下,我们假设的环境是设置$KCODE="UTF8"(-Ku)后,再进行加载、执行。

 

 

 

 

 

 

 

Ruby中,内置很多对字符串操作的方法,下面我们看看最主要的一些方法

连接字符串

image

可以对字符串做乘法

image

字符串比较

image

我们知道字符串其实存储的是数字,对字符串进行比较其实就是比较ASCII值

用?求字符的ASCII值

image

数字代表的字符

image

将需要替换的表达式的放入#{..}

image

字符串也可以插入字符串变量

image

字符串常用方法

image

image

替换字符串的某一范围内的值

image

删除字符

image

判断空

image

以replace来替换字符串中所有与pattern相匹配的部分

image

判断包含指定的字符串

image

按照从左到右的顺序搜索子字符串,并返回搜索到的子字符串的左侧位置. 若没有搜索到则返回nil

image

replace来替换首次匹配pattern的部分

image

对字符串中的各行进行迭代操作,对字符串中的各个字节进行迭代操作

image

拆分字符串

image

压缩重复的字符串

image

删除头部和尾部的所有空白字符。空白字符是指" "t"r"n"f"v"

image

若字符串中包含search字符串中的字符时,就将其替换为replace字符串中相应的字符

image

本文作者:王德水

未经同意,禁止转载

作者: 王德水
出处:http://www.cnblogs.com/cnblogsfans
版权:本文版权归作者和博客园共有
转载:欢迎转载,为了保存作者的创作热情,请按要求【转载】,谢谢
要求:未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任

 

 

 

 

 

 

大小写不区分查找

    puts "hello".upcase.index("H"),利用downcase或者upcase全部转换成小写或者大写,然后再查找。

正则表达式匹配查找

operator =~ 将返回匹配的模式开始位置,如果没有找到则返回nil。
puts "abcde789" =~ /d/
输出5.

 

 

 

 

 

http://www.nocow.cn/index.php/Ruby/string

 

 

http://developer.51cto.com/art/201007/210570.htm

 

ruby语法

http://developer.51cto.com/art/200912/169320.htm

 

 

 

 

 

TidyRead

Style:





Background
Foreground
Link Color
Link Visited

  Size:




  Width:



More

Open Mode
Overlay Original
Replace Original


Font
Arial
Tahoma
Verdana
Georgia
Segoe
Times
Book
Comic
Courier
Trebuchet
Palatino
Lucida
Text Align
Left
Justify
Text Dir
Left to Right
Right to Left
Disable TidyRead
Save Settings
Print
Close
求一个正则表达式,提取utf8编码的字符串中的汉字,剔除英文、数字、特殊符号等
悬赏:10 发布时间:2009-04-16 提问人:playcase (初级程序员)

< > 猎头职位: 北京: JavaEye招聘Ruby高级工程师

求一个正则表达式,提取utf8编码的字符串中的汉字,剔除英文、数字、特殊符号等
问题补充:
多谢,
目前需要ruby程序

采纳的答案
2009-04-16 xhanxhanxhan (中级程序员)

楼上的太复杂了。
我不知道正则怎么写
不过自己写了个很简单的:

  1. def find_chinese_charactor str  
  2.      str.unpack("U*").select{ |p|  (0x4e00..0x9fa5).member? p }.pack("U*")  
  3. end
  4. "今天开始下雨了,it start to rain,now.123123哈哈".unpack("U*").select{ |p|  (0x4e00..0x9fa5).member? p }.pack("U*")  
def find_chinese_charactor str
     str.unpack("U*").select{ |p|  (0x4e00..0x9fa5).member? p }.pack("U*")
end

#测试用例
"今天开始下雨了,it start to rain,now.123123哈哈".unpack("U*").select{ |p|  (0x4e00..0x9fa5).member? p }.pack("U*")


#output copied to clipboard
#今天开始下雨了哈哈

再比我简单的估计只有用正则了吧
提问者对于答案的评价:
好用!
其他回答

<HTML>
<HEAD>
<script>
function ddd()
{
var str = document.getElementById(\'text\').value;
if (str.match(/[^\u4e00-\u9fa5]/g))
  {
  alert("只能输入中文");
  }
}
</script>
</HEAD>
<BODY>
<form name="testForm" id="testForm">
<center>
What is you name? <input type="text" id="text" value="" />
<input type="button" value="提交" onclick ="ddd()"/>
</center>
</form>
</BODY>
</HTML>

huangnetian (架构师) 2009-04-16

  1. publicstatic String getString(String str)  
  2.     {  
  3.         String regex = "[^a-z|\\d|\\s|\\p{Punct}]";  
  4.         Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);  
  5.         Matcher m = p.matcher(str);  
  6.         StringBuffer ret = new StringBuffer();  
  7. while(m.find())  
  8.         {  
  9.             ret.append(m.group());  
  10.         }  
  11. return ret.toString();  
  12.     } 
public static String getString(String str)
	{
		String regex = "[^a-z|\\d|\\s|\\p{Punct}]";
		
		Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
		
		Matcher m = p.matcher(str);
		
		StringBuffer ret = new StringBuffer();
		while(m.find())
		{
			ret.append(m.group());
		}
		
		return ret.toString();
	}

lovewhzlq (CTO) 2009-04-16

同学,这不差不多嘛,就主要是正则表达 式嘛哎

lovewhzlq (CTO) 2009-04-16

  1. /[\x{4e00}-\x{9fa5}]*/u 
/[\x{4e00}-\x{9fa5}]*/u

以上针对中文的正则

天机老人 (中级程序员) 2009-04-16

定义Stting 的时候注意如下:
/[\\x{4e00}-\\x{9fa5}]*/u 

天机老人 (中级程序员) 2009-04-16

看来楼上的一些解法大部分是网上搜的,,,这个正则表达式或许正确,但是对ruby不适用的,ruby 1.86的编码存在许多问题,,,貌似1.9会好些。

  1. $KCODE=\'u\'
  2. require\'iconv\'
  3. require\'jcode\'
  4. require\'open-uri\'
  5. classString
  6. def get_pure_chinese  
  7. self.scan(/./u).map{|e| e if e.size==3}.join  
  8. end
  9. def to_gbk  
  10.     Iconv.iconv(\'gbk\',\'utf-8\',self).to_s  
  11. end
  12. end
  13. string=open(\'http://javaeye.com\').read 
  14. puts string.get_pure_chinese.to_gbk
  15. 输入结果:  
  16. =begin
  17. 编程框架技术敏捷软件开发实践做最棒的软件开发交流社区编程框架深入开发开发企业应用  
  18. 设计模式开源框架应用服务器讨论编程开发实践编程敏捷软件开发软件配置管理软件测试项  
  19. 目管理数据库平台精通编程框架技术敏捷软件开发实践深度技术社区技术网站频道订阅登录  
  20. 您还未登录我的应用登录注册最棒的软件开发交流社区推荐知识库开发架构渐变论坛热点推  
  21. 荐-年月进入的世界在平台上安装和配置详解面向对象技术基础一创始人推荐博客不要把简  
  22. 单的事情搞得复杂(例)不要把简单的事情搞得复杂(例)标签大全、样式大全、参考大全  
  23. (格式)标签大全、样式大全、参考大全(格式)特效大集合网络收集特效大集合网络收集  
  24. 《大腕》之网站开发版《大腕》之网站开发版大型网站架构之优酷篇大型网站架构之优酷篇  
  25. 人生的第一次摆摊人生的第一次摆摊年终奖发多了年终奖发多了程序员的三大美德程序员的  
  26. 三大美德我的小站目前开放的网站通用调用接口我的小站目前开放的网站通用调用接口《精  
  27. 粹》书评《精粹》书评无刷新聊天室实现压缩包附件下载无刷新聊天室实现压缩包附件下载  
  28. 学习是学习,工作是工作学习是学习,工作是工作续:一个待业个月想做的老人续:一个待  
  29. 业个月想做的老人让第一个跑起来让第一个跑起来全角和半角的解决方法全角和半角的解决  
  30. 方法推荐圈子圈子语言语言难否?说难不难,不难也难。难,是因为没有正确掌握的语义,  
  31. 一但掌握,看代码如行云流水,如庖丁解牛。是的超集,打通了,不在话下,是操作系统的  
  32. ,通关后可以充分利用操作系统全部功能,做别人做不到的事。学习,力争精通,是成为高  
  33. 手必经之路。欢迎来到语言圈,共同学习,探索无极。语言语言语言难否?说难不难,不难  
  34. 也难圈子欢迎大家来讨论和学习,这里有的最佳应用和的展望。欢迎大家来讨论和学习,这  
  35. 圈子魔兽争霸玩不腻的魔兽争霸。魔兽争霸魔兽争霸玩不腻的魔兽争霸。黑板报论坛热点推  
  36. 荐-年月图灵杯第届问答大赛开始了!奖品丰厚!前五名都能获奖-月日至月日论坛公告:  
  37. 新开编程语言版面中港软件硕士不参加统考国家承认学位*财经大学金融学博士课程深圳  
  38. 热招焦点新闻更多百度与的竞争关键也许还真就缺那个像素百度与的竞争关键也许还真就缺  
  39. 网易接盘《魔兽世界》,第九城市也许就要变成“第九农村”了!网易接盘《魔兽世界》,  
  40. 第九城市也许就的首席开源官抨击对的支持的首席开源官抨击对的支走进苏黎世奢华办公室  
  41. 走进苏黎世奢华办公室用户调查用户调查发布了发布了插件发布,将内置支持插件发布,编  
  42. 程和企业应用热点论坛学习笔记学习笔记以截拳道看太极模式以截拳道看太极模式接口存在  
  43. 的意义只在于接口依赖注入接口存在的意义只在于接口依赖注入有兴趣的兄弟(牛人)们来  
  44. 说说(猜猜)的调用原理啊有兴趣的兄弟(牛人)们来说说(猜猜)优劣之我见优劣之我见  
  45. 从一道面试题想到的论坛数据库设计从一道面试题想到的论坛数据库设计初体验初体验实战  
  46. 实战对权限管理认识的一些误区对权限管理认识的一些误区前端技术热点技术论坛页面输出  
  47. 时一些常用的小技巧(持续更新中)页面输出时一些常用的小技巧(持续更新决定在中集成  
  48. 编译客户端模板功能决定在中集成编译客户端模板功编辑器。编辑器。、之说三道四、之说  
  49. 三道四闭包闭包下一步开发计划下一步开发计划和之间的选择问题和之间的选择问题的版本  
  50. !的版本你应当了解的几个新技术你应当了解的几个新技术编程热点论坛教你用算命!教你  
  51. 用算命!浅尝浅尝性能提升的秘籍性能提升的秘籍请注意自带的有性能问题请注意自带的如  
  52. 果你升级完遇到了问题如果你升级完遇到了问题不再推荐不再推荐中文编程中文编程闲聊客  
  53. 户端版闲聊客户端版可视化开发工具可视化开发工具软件项目管理热点软件开发论坛也说回  
  54. 归测试也说回归测试有人真正把自动化功能测试做起来了吗?有人真正把自动化功能测试做  
  55. 起来了吗?一个时间进度安排比较急的项目,组员却水平有限一个时间进度安排比较急的项  
  56. 目,组员却如何看待项目组中没有责任心的成员如何看待项目组中没有责任心的成员这样的  
  57. 项目经理我要当吗这样的项目经理我要当吗如何让软件外包人员具有归属感如何让软件外包  
  58. 人员具有归属感也谈人员流失问题王泽宾也谈人员流失问题王泽宾是不是以开发效率换代码  
  59. 质量(原标题:单元测试的成本和收益)是不是以开发效率换代码质量(原标后备人才的培  
  60. 养后备人才的培养综合技术热点综合技术论坛关于单例模式的一些疑问?关于单例模式的一  
  61. 些疑问?十进制转化十六进制问题??十进制转化十六进制问题??用构建高性能消息服务  
  62. 用构建高性能消息服务成功刷到成功刷到偶对的偶对的的多数据库处理(垂直分库和水平分  
  63. 库)的多数据库处理(垂直分库和水平这个循环太让人郁闷了这个循环太让人郁闷了一个很  
  64. 有趣的编程题一个很有趣的编程题下应用开发的一些总结下应用开发招聘和求职热点招聘论  
  65. 坛最近行情如何?最近行情如何?请南京的朋友帮忙介绍个工作,提供个面试机会就行(开  
  66. 发)请南京的朋友帮忙介绍个工作,提供个面我听说:刚刚毕业的研究生在深圳华为的工资  
  67. 有元我听说:刚刚毕业的研究生在深圳华为的大家帮看看我这份简历合格不?刚辞职,今天  
  68. 写的简历!不晓得还有那些地方要修改,希望大家指出!大家帮看看我这份简历合格不?刚  
  69. 辞职,上海,求职上海,求职找工作一个月了找工作一个月了调查,敲代码,你敲了几年?  
  70. 你还想敲几年?以后的打算是什么?调查,敲代码,你敲了几年?你还想敲关于为什么这么  
  71. 多晒简历的想法!关于为什么这么多晒简历的想法!诚心询问下,这种水平在北京薪资是什  
  72. 么水平的。谢谢了诚心询问下,这种水平在北京薪资是什么圈子讨论热点圈子频道入圈这么  
  73. 久,没贡献什么,现在发个语言的组件实现,呵呵入圈这么久,没贡献什么,现在发个语五  
  74. 一节,来成都热波音乐节吧!五一节,来成都热波音乐节吧!请推荐一本本,女生用,谢谢  
  75. 请推荐一本本,女生用,谢谢如何投资如何投资中怎样让后台中的验证信息在前台的页面弹  
  76. 出框显示?中怎样让后台中的验证信息在前细粒度权限管理产品的应用场景细粒度权限管理  
  77. 产品的应用场景怎么把数字变成字符串怎么把数字变成字符串如何解析通过请求来的数据?  
  78. 如何解析通过请求来的如何才能玩好魔兽争霸?如何才能玩好魔兽争霸?海阔天空热点海阔  
  79. 天空论坛统计北京上海以及*程序员含港澳的收入情况统计北京上海以及*程序员含港  
  80. 北京的上门服务为什么这么发达呢?北京的上门服务为什么这么发达呢?网易抢走《魔兽世  
  81. 界》,第九城市或变“第九农村”!网易抢走《魔兽世界》,第九城市或变“决定离开北京  
  82. ,感谢,感谢决定离开北京,感谢,感谢我决定不买请看图!我决定不买请看图!搜狐的短  
  83. 板?搜狐的短板?列举一下北京的高薪企业,为跳槽人士指明方向列举一下北京的高薪企业  
  84. ,为跳槽人士指批了淘宝批支付宝批了淘宝批支付宝我被小鸟轰炸了我被小鸟轰炸了搜索热  
  85. 门招聘职位新锐互动公司北京和上海两地诚聘杭州华颂科技有限公司诚聘、、、上海泰腾投  
  86. 资诚聘软件工程师杭州兆义信息技术有限公司诚聘资深工程师上海电子商务网站诚聘工程师  
  87. 上海中科大洋诚聘工程师浙江:百世物流诚聘资深工程师北京:迅捷英翔诚聘高级工程师上  
  88. 海巨人网络诚聘网页游戏工程师加盟电子商务创业公司,获得一场精彩的生活求职宝典规避  
  89. 职业生涯规划陷阱面试中肢体语言的禁忌测试你未来的职业方向何为五险一金“杀人游戏”  
  90. 的职场测试之五面试之前必须查明一切博客本月排行榜王者之剑博客年度排行榜臧圩人首页  
  91. 新闻论坛问答知识库博客圈子招聘服务搜索敏捷图书普元广告服务黑板报关于我们联系我们  
  92. 友情链接上海炯耐计算机软件有限公司沪备号  
  93. =end
$KCODE=\'u\'
require\'iconv\'
require\'jcode\'
require\'open-uri\'
class String
  def get_pure_chinese
    self.scan(/./u).map{|e| e if e.size==3}.join
  end
  def to_gbk
    Iconv.iconv(\'gbk\',\'utf-8\',self).to_s
  end
end
#test
string=open(\'http://javaeye.com\').read #获取一秛utf-8文本
puts string.get_pure_chinese.to_gbk#用to_gbk是因为了把utf-8字符转化成gbk,以免在控制台显示乱码,如果你是做rails应用,可以不用to_gbk直接获取中文的utf-8编码结果
输入结果:
=begin
编程框架技术敏捷软件开发实践做最棒的软件开发交流社区编程框架深入开发开发企业应用
设计模式开源框架应用服务器讨论编程开发实践编程敏捷软件开发软件配置管理软件测试项
目管理数据库平台精通编程框架技术敏捷软件开发实践深度技术社区技术网站频道订阅登录
您还未登录我的应用登录注册最棒的软件开发交流社区推荐知识库开发架构渐变论坛热点推
荐-年月进入的世界在平台上安装和配置详解面向对象技术基础一创始人推荐博客不要把简
单的事情搞得复杂(例)不要把简单的事情搞得复杂(例)标签大全、样式大全、参考大全
(格式)标签大全、样式大全、参考大全(格式)特效大集合网络收集特效大集合网络收集
《大腕》之网站开发版《大腕》之网站开发版大型网站架构之优酷篇大型网站架构之优酷篇
人生的第一次摆摊人生的第一次摆摊年终奖发多了年终奖发多了程序员的三大美德程序员的
三大美德我的小站目前开放的网站通用调用接口我的小站目前开放的网站通用调用接口《精
粹》书评《精粹》书评无刷新聊天室实现压缩包附件下载无刷新聊天室实现压缩包附件下载
学习是学习,工作是工作学习是学习,工作是工作续:一个待业个月想做的老人续:一个待
业个月想做的老人让第一个跑起来让第一个跑起来全角和半角的解决方法全角和半角的解决
方法推荐圈子圈子语言语言难否?说难不难,不难也难。难,是因为没有正确掌握的语义,
一但掌握,看代码如行云流水,如庖丁解牛。是的超集,打通了,不在话下,是操作系统的
,通关后可以充分利用操作系统全部功能,做别人做不到的事。学习,力争精通,是成为高
手必经之路。欢迎来到语言圈,共同学习,探索无极。语言语言语言难否?说难不难,不难
也难圈子欢迎大家来讨论和学习,这里有的最佳应用和的展望。欢迎大家来讨论和学习,这
圈子魔兽争霸玩不腻的魔兽争霸。魔兽争霸魔兽争霸玩不腻的魔兽争霸。黑板报论坛热点推
荐-年月图灵杯第届问答大赛开始了!奖品丰厚!前五名都能获奖-月日至月日论坛公告:
新开编程语言版面中港软件硕士不参加统考国家承认学位*财经大学金融学博士课程深圳
热招焦点新闻更多百度与的竞争关键也许还真就缺那个像素百度与的竞争关键也许还真就缺
网易接盘《魔兽世界》,第九城市也许就要变成“第九农村”了!网易接盘《魔兽世界》,
第九城市也许就的首席开源官抨击对的支持的首席开源官抨击对的支走进苏黎世奢华办公室
走进苏黎世奢华办公室用户调查用户调查发布了发布了插件发布,将内置支持插件发布,编
程和企业应用热点论坛学习笔记学习笔记以截拳道看太极模式以截拳道看太极模式接口存在
的意义只在于接口依赖注入接口存在的意义只在于接口依赖注入有兴趣的兄弟(牛人)们来
说说(猜猜)的调用原理啊有兴趣的兄弟(牛人)们来说说(猜猜)优劣之我见优劣之我见
从一道面试题想到的论坛数据库设计从一道面试题想到的论坛数据库设计初体验初体验实战
实战对权限管理认识的一些误区对权限管理认识的一些误区前端技术热点技术论坛页面输出
时一些常用的小技巧(持续更新中)页面输出时一些常用的小技巧(持续更新决定在中集成
编译客户端模板功能决定在中集成编译客户端模板功编辑器。编辑器。、之说三道四、之说
三道四闭包闭包下一步开发计划下一步开发计划和之间的选择问题和之间的选择问题的版本
!的版本你应当了解的几个新技术你应当了解的几个新技术编程热点论坛教你用算命!教你
用算命!浅尝浅尝性能提升的秘籍性能提升的秘籍请注意自带的有性能问题请注意自带的如
果你升级完遇到了问题如果你升级完遇到了问题不再推荐不再推荐中文编程中文编程闲聊客
户端版闲聊客户端版可视化开发工具可视化开发工具软件项目管理热点软件开发论坛也说回
归测试也说回归测试有人真正把自动化功能测试做起来了吗?有人真正把自动化功能测试做
起来了吗?一个时间进度安排比较急的项目,组员却水平有限一个时间进度安排比较急的项
目,组员却如何看待项目组中没有责任心的成员如何看待项目组中没有责任心的成员这样的
项目经理我要当吗这样的项目经理我要当吗如何让软件外包人员具有归属感如何让软件外包
人员具有归属感也谈人员流失问题王泽宾也谈人员流失问题王泽宾是不是以开发效率换代码
质量(原标题:单元测试的成本和收益)是不是以开发效率换代码质量(原标后备人才的培
养后备人才的培养综合技术热点综合技术论坛关于单例模式的一些疑问?关于单例模式的一
些疑问?十进制转化十六进制问题??十进制转化十六进制问题??用构建高性能消息服务
用构建高性能消息服务成功刷到成功刷到偶对的偶对的的多数据库处理(垂直分库和水平分
库)的多数据库处理(垂直分库和水平这个循环太让人郁闷了这个循环太让人郁闷了一个很
有趣的编程题一个很有趣的编程题下应用开发的一些总结下应用开发招聘和求职热点招聘论
坛最近行情如何?最近行情如何?请南京的朋友帮忙介绍个工作,提供个面试机会就行(开
发)请南京的朋友帮忙介绍个工作,提供个面我听说:刚刚毕业的研究生在深圳华为的工资
有元我听说:刚刚毕业的研究生在深圳华为的大家帮看看我这份简历合格不?刚辞职,今天
写的简历!不晓得还有那些地方要修改,希望大家指出!大家帮看看我这份简历合格不?刚
辞职,上海,求职上海,求职找工作一个月了找工作一个月了调查,敲代码,你敲了几年?
你还想敲几年?以后的打算是什么?调查,敲代码,你敲了几年?你还想敲关于为什么这么
多晒简历的想法!关于为什么这么多晒简历的想法!诚心询问下,这种水平在北京薪资是什
么水平的。谢谢了诚心询问下,这种水平在北京薪资是什么圈子讨论热点圈子频道入圈这么
久,没贡献什么,现在发个语言的组件实现,呵呵入圈这么久,没贡献什么,现在发个语五
一节,来成都热波音乐节吧!五一节,来成都热波音乐节吧!请推荐一本本,女生用,谢谢
请推荐一本本,女生用,谢谢如何投资如何投资中怎样让后台中的验证信息在前台的页面弹
出框显示?中怎样让后台中的验证信息在前细粒度权限管理产品的应用场景细粒度权限管理
产品的应用场景怎么把数字变成字符串怎么把数字变成字符串如何解析通过请求来的数据?
如何解析通过请求来的如何才能玩好魔兽争霸?如何才能玩好魔兽争霸?海阔天空热点海阔
天空论坛统计北京上海以及*程序员含港澳的收入情况统计北京上海以及*程序员含港
北京的上门服务为什么这么发达呢?北京的上门服务为什么这么发达呢?网易抢走《魔兽世
界》,第九城市或变“第九农村”!网易抢走《魔兽世界》,第九城市或变“决定离开北京
,感谢,感谢决定离开北京,感谢,感谢我决定不买请看图!我决定不买请看图!搜狐的短
板?搜狐的短板?列举一下北京的高薪企业,为跳槽人士指明方向列举一下北京的高薪企业
,为跳槽人士指批了淘宝批支付宝批了淘宝批支付宝我被小鸟轰炸了我被小鸟轰炸了搜索热
门招聘职位新锐互动公司北京和上海两地诚聘杭州华颂科技有限公司诚聘、、、上海泰腾投
资诚聘软件工程师杭州兆义信息技术有限公司诚聘资深工程师上海电子商务网站诚聘工程师
上海中科大洋诚聘工程师浙江:百世物流诚聘资深工程师北京:迅捷英翔诚聘高级工程师上
海巨人网络诚聘网页游戏工程师加盟电子商务创业公司,获得一场精彩的生活求职宝典规避
职业生涯规划陷阱面试中肢体语言的禁忌测试你未来的职业方向何为五险一金“杀人游戏”
的职场测试之五面试之前必须查明一切博客本月排行榜王者之剑博客年度排行榜臧圩人首页
新闻论坛问答知识库博客圈子招聘服务搜索敏捷图书普元广告服务黑板报关于我们联系我们
友情链接上海炯耐计算机软件有限公司沪备号
=end

汪兆铭 (架构师) 2009-04-16

  1. s="今天开始下雨了,it start to rain,now.123123哈哈"
  2. p=/[^\u4e00-\u9fa5]/  
  3. s1=s.gsub(p,\'\')  
  4. p s1.encode(\'gbk\',\'utf-8\') 
s="今天开始下雨了,it start to rain,now.123123哈哈"
p=/[^\u4e00-\u9fa5]/
s1=s.gsub(p,\'\')
p s1.encode(\'gbk\',\'utf-8\')

ruby1.9.1p0下运行,代码保存为带BOM的utf-8

orange0513 (初级程序员) 2009-04-17

其实都差不多的,我的核心代码貌似要比你的还简单。。。

  1. $KCODE=\'u\'
  2. require\'jcode\'
  3. def get_pure_chinese(str)   
  4.     str.scan(/./u).select {|e| e.size==3}.join    
  5.   end 
$KCODE=\'u\'
require\'jcode\'
def get_pure_chinese(str) 
    str.scan(/./u).select {|e| e.size==3}.join  
  end

之所以定义其他方法注释已经说的很清楚了,想必楼主也一定遇到过这个问题。

汪兆铭 (架构师) 2009-04-17

再补充一点

  1. $KCODE=\'u\'
  2. require\'jcode\'
$KCODE=\'u\'  
require\'jcode\'

是可以去掉的,因为/./u中正则字面量u会指定按$KCODE=\'u\'方式处理字符串

汪兆铭 (架构师) 2009-04-17

RE:汪兆铭
恩,仔细看后确实差不多,无非是先拆字,然后判断
学到一个新方法 str.scan  谢谢~~
不过你的有一个问题,并不是所有size为3的都为中文字符
比如日语,您少考虑这一点了。
嘿嘿。

xhanxhanxhan (中级程序员) 2009-04-17

  1. s = <<-EOS  
  2. さて、今日はキャンペーン臨時号!!  
  3. コレを読んでさまざまな得点をフル活用してね♪  
  4. 123231244  
  5. 中文开始::“很好不强大”  
  6. EOS 
s = <<-EOS
さて、今日はキャンペーン臨時号!!
コレを読んでさまざまな得点をフル活用してね♪
123231244
中文开始::“很好不强大”
EOS

xhanxhanxhan (中级程序员) 2009-04-17

   1. ^[\u2E80-\u9FFF]+$    
   2. 匹配所有东亚区的语言    
   3. ^[\u4E00-\u9FFF]+$    
   4. 匹配简体和繁体    
   5. ^[\u4E00-\u9FA5]+$    
   6. 匹配简体 

xhanxhanxhan (中级程序员) 2009-04-17

  我给个建议,把上面的正则表达式用火狐的一的测正则表达式的插件测测不就ok了!

litao2it (初级程序员) 2009-04-17

TidyReadClose TidyRead

分类:

技术点:

相关文章: