`
hardcoder
  • 浏览: 62215 次
  • 来自: ...
最近访客 更多访客>>
社区版块
存档分类
最新评论

正则表达式学习笔记

阅读更多
ruby 代码
  1. #构造正则表达式的3种方式   
  2. puts a=Regexp.new('^s*[a-z]')   
  3. b=/^s*[a-z]/   
  4. c=%r{^\s*[a-z]}   
  5.   
  6. name="Fats Waller"  
  7. puts name=~/a/  #返回 a 的字符位置   
  8. name=~/z/   
  9. puts /a/=~name   
  10.   
  11. def show_regexp(a,re)   
  12.   if a=~re   
  13.     "#{$`}<<#{$&}>>#{$'}" #$`得到匹配之前的那部分字符串,$&得到匹配那部分字符串,$'得到匹配之后那部分字符串   
  14.   else  
  15.     "no match"  
  16.   end  
  17. end  
  18.   
  19. #特殊字符 . | ( ) [ ] { } + \ ^ $ *  ?    
  20. #之前放置 \ 匹配它们的字面量   
  21.   
  22. puts show_regexp('very interesting',/t/)   
  23. puts show_regexp('yes|no',/\|/) #\|匹配 |   
  24. puts show_regexp('yes (no)',/\(no\)/) #\( , \)   
  25.   
  26. #位置匹配 ^ 行首 $行尾 \A字符串开始 \z和\Z 匹配字符串的结尾   
  27. puts show_regexp("this is\nthe time",/^the/)   
  28. puts show_regexp("this is\nthe time",/is$/)   
  29. puts show_regexp("this is\nthe time",/\Athis/)   
  30. puts show_regexp("this is\nthe time",/\Athe/)   
  31. puts "sso good".gsub!(/\z/,"p")   
  32. puts "sso".gsub!(/.$/,"p")   
  33. puts "sos".gsub!(/.\z/,"a")   
  34.   
  35. #\b 匹配词的边界 \B匹配非词的边界   
  36. puts show_regexp("this is\nthe time",/\bis/)   
  37. puts show_regexp("this is\nthe time",/\Bis/)   
  38.   
  39.   
  40. #字符类 处于方括号之间的集合   
  41. #[:digit:]是POSIX字符类   
  42. puts show_regexp("Price $12.",/[aeiou]/)   
  43. puts show_regexp("Price $12.",/[\s]/)   
  44. puts show_regexp("Price $12.",/[[:digit:]]/)   
  45. puts show_regexp("Price $12.",/[[:space:]]/)   
  46. puts show_regexp("Price $12.",/[[:punct:]aeiou]/)   
  47.   
  48. a='see [Design Patterns-page 123]'   
  49. puts show_regexp(a,/[A-Fa-f]/)   
  50. puts show_regexp(a,/[0-9][0-9]/)   
  51. puts show_regexp(a,/[\]]/)   
  52. puts show_regexp(a,/[-]/)   
  53. puts show_regexp(a,/[^a-z]/)   
  54. puts show_regexp(a,/[^a-z\s]/)   
  55.   
  56. puts show_regexp(a,/\d/)   
  57.   
  58. #.匹配除回车换行符之外的任何字符(在多行模式下它也匹配回车)   
  59. a='It costs $12.'   
  60. puts show_regexp(a,/c.s/)   
  61. puts show_regexp(a,/./)   
  62. puts show_regexp(a,/\./)   
  63.   
  64. #重复   
  65. #r代表模式内先前的正则表达式   
  66. #r* 匹配零个或多个r的出现   
  67. #r+ 匹配1个或多个r的出现   
  68. #r? 匹配0个或1个r的出现   
  69. #r{m,n} 匹配至少"m"次r和最多"n"次的出现   
  70. #r{m,} 匹配至少"m"次r的出现   
  71. #r{m} 只匹配"m"次r的出现   
  72.   
  73. a="the moon is made of cheese"  
  74. puts show_regexp(a,/\w+/)   
  75. puts show_regexp(a,/\s.*\s/)   
  76. puts show_regexp(a,/\s.*?\s/)   
  77. puts show_regexp(a,/[aeiou]{2,99}/)   
  78. puts show_regexp(a,/mo?o/)   
  79.   
  80. #替换   
  81. #|匹配它之前或之后的正则表达式   
  82. a="red ball blue sky"  
  83. puts show_regexp(a,/d|e/)   
  84. puts show_regexp(a,/al|lu/)   
  85. puts show_regexp(a,/red ball|angry sky/)   
  86.   
  87. puts show_regexp('banana',/an*/)   
  88. puts show_regexp('banana',/(an)*/)   
  89. puts show_regexp('banana',/(an)+/)   
  90. puts show_regexp(a,/blue|red/)   
  91. puts show_regexp(a,/(blue|red) \w+/)   
  92. puts show_regexp(a,/red|blue \w+/)   
  93. puts show_regexp(a,/red (ball|angry) sky/)   
  94.   
  95. a='the red angry sky'   
  96. puts show_regexp(a,/red (ball|angry) sky/)   
  97.   
  98. #括号也收集模式匹配的结果   
  99. "12:50am"=~/(\d\d):(\d\d)(..)/   
  100. puts "Hour is #$1,minute #$2"  
  101. "12:50am"=~/((\d\d):(\d\d))(..)/   
  102. puts "Time is #$1"  
  103. puts "Hour is #$2,minute #$3"  
  104. puts "AM/PM is #$4"  
  105.   
  106. #\1 表示第一个组的匹配 \2表示第二个组的匹配   
  107. puts show_regexp('He said "Hello"',/(\w)\1/)   
  108. puts show_regexp('Mississipi',/(\w+)\1/)   
  109.   
  110. #也可以向后引用去匹配分界符号   
  111. puts show_regexp('He said "Hello"',/(["']).*?\1/)  
  112. puts show_regexp("He said 'Hello'",/(["']).*?\1/)   
  113.   
  114. #基于模式的替换   
  115.   
  116. a="the quick brown fox"  
  117. puts a.sub(/[aeiou]/,'*')   
  118. puts a.gsub(/[aeiou]/,'*')   
  119. puts a.sub(/\s\S+/,'')   
  120. puts a.gsub(/\s\S+/,'')   
  121.   
  122. a="the quick brown fox"  
  123. puts a.sub(/^./){|match|match.upcase}   
  124. puts a.gsub(/[aeiou]/){|vowel|vowel.upcase}   
  125.   
  126. def mixed_case(name)   
  127.   name.gsub(/\b\w/){|first|first.upcase}   
  128. end  
  129.   
  130. #替换中的反斜线序列   
  131. puts mixed_case("fats waller")   
  132. puts "fred:smith".sub(/(\w+):(\w+)/,'\2,\1')   
  133. puts "nercpyitno".gsub(/(.)(.)/,'\2\1')   
  134.   
  135. #\&(最后的匹配),\+(最后匹配的组),\'(匹配之前的字符串),\\(字面量反斜线)   
  136. str='a\b\c'   
  137. puts str.gsub(/\\/,'\\\\\\\\')   
  138. puts str.gsub(/\\/,'\&\&')   
  139. puts str.gsub(/\\/){'\\\\'}   
  140.   
  141.   
  142. #面向对象的正则表达式   
  143. re=/(\d+):(\d+)/   
  144. md=re.match("Time: 12:34am")   
  145. puts md[0] # ==$&   
  146. puts md[1] #==$1   
  147. puts md[2] # ==$2   
  148. puts md.pre_match # == $`   
  149. puts md.post_match # ==$'   
  150.   
  151. #$~保存线程局部变量   
  152. re=/(\d+):(\d+)/   
  153. md1=re.match("Time: 12:34am")   
  154. md2=re.match("Time: 10:30pm")   
  155. puts [$1,$2]   
  156. $~=md1   
  157. puts [$1,$2]  
分享到:
评论
9 楼 chaofans 2007-11-26  
又一个只有www不行的
/^((?!www).*|www.+)$/
8 楼 chaofans 2007-11-26  
上面的是以www开始的不行

这儿是只有www不行
/^([^w]{3}|.{1,2}|.{4,})$/
7 楼 zeroleonhart 2007-11-02  
/^(?!www).+?$/可能就可以
6 楼 zeroleonhart 2007-10-31  
condition = /^(((?!www)\w\w\w)|(\w{4,})|(\w{1,2}))$/
5 楼 rainchen 2007-10-26  
zeroleonhart 写道
rainchen 写道
正好有个小正则问题需要请教,
如何用这种形式:
condition = /^www$/ #只匹配www
condition =~ 'www'
# 若有匹配返回非nil

只通过修改condition的值 来匹配除“www”以外的所有字串(即只有 condition =~ 'www' 时为nil),如:"ww","wwww","abcd"




condition = /^[^w]{3}$/


呵呵,这个也是我第一个想到的写法,但不行,有兴趣的同学都先请在console里试下这几个最基本的例子先:
如:"ww","wwww","abcd"
4 楼 zeroleonhart 2007-10-25  
rainchen 写道
正好有个小正则问题需要请教,
如何用这种形式:
condition = /^www$/ #只匹配www
condition =~ 'www'
# 若有匹配返回非nil

只通过修改condition的值 来匹配除“www”以外的所有字串(即只有 condition =~ 'www' 时为nil),如:"ww","wwww","abcd"




condition = /^[^w]{3}$/
3 楼 rainchen 2007-10-22  
s22 写道
:conditions=>{:subdomain=>/^((?!www).)*$/}


不行,只要以www开头的都nil了

>> condition = /^((?!www).)*$/
=> /^((?!www).)*$/
>> condition =~ 'wwww'
=> nil
2 楼 s22 2007-10-20  
:conditions=>{:subdomain=>/^((?!www).)*$/}
1 楼 rainchen 2007-10-11  
正好有个小正则问题需要请教,
如何用这种形式:
condition = /^www$/ #只匹配www
condition =~ 'www'
# 若有匹配返回非nil

只通过修改condition的值 来匹配除“www”以外的所有字串(即只有 condition =~ 'www' 时为nil),如:"ww","wwww","abcd"

相关推荐

    正则表达式学习笔记详解!

    ### 正则表达式学习笔记详解 正则表达式(Regular Expression)是一种强大的文本匹配工具,广泛应用于数据处理、文本搜索、格式验证等场景。以下是对给定文件中提到的各种正则表达式的详细解析,旨在帮助读者深入...

    基于java的开发源码-java多线程反射泛型及正则表达式学习笔记和源码.zip

    基于java的开发源码-java多线程反射泛型及正则表达式学习笔记和源码.zip 基于java的开发源码-java多线程反射泛型及正则表达式学习笔记和源码.zip 基于java的开发源码-java多线程反射泛型及正则表达式学习笔记和源码....

    java正则表达式学习笔记

    ### Java正则表达式基础知识与应用 #### 一、引言 正则表达式是一种强大的文本处理工具,它能够帮助开发者高效地进行字符串的搜索、替换等操作。Java中的正则表达式支持广泛的标准和特性,是进行文本处理任务的理想...

    javascript正则表达式学习笔记

    这篇学习笔记将深入探讨JavaScript正则表达式的概念、语法和实际应用。 一、正则表达式基础 1. 创建正则表达式: - 字面量表示法:`/pattern/flags` - 构造函数:`new RegExp('pattern', 'flags')` 2. 常见的...

    关于js正则表达式学习笔记(自己整理的)

    JavaScript中的正则表达式是处理字符串的强大工具,用于匹配、替换、分割文本。它们在编程中扮演着不可或缺的角色,尤其在验证用户输入、提取数据、格式化内容等方面。以下是对正则表达式的基础知识和常见用法的详细...

    正则表达式 学习笔记 30分钟速成

    好东西才与大家分享!这是博客园一位老师的正则表达式教学笔记,很精炼的阐述,看了你一定不后悔……

    正则表达式学习笔记总结

    正则表达式是一种强大的文本处理工具,用于匹配、查找、替换和提取字符串中的特定模式。在编程语言中,正则表达式广泛应用于数据验证、文本分析...通过不断的实践和学习,你可以创建更复杂的正则表达式来满足各种需求。

    基于java的开发源码-多线程反射泛型及正则表达式学习笔记和源码.zip

    在"基于java的开发源码-多线程反射泛型及正则表达式学习笔记和源码.zip"这个压缩包中,包含了三个关键的Java编程概念:多线程、反射和泛型,以及正则表达式。下面我们将详细探讨这些知识点。 1. **多线程**:多线程...

    [小小明]Python正则表达式全套笔记v0.3(1.8万字干货)

    本文档是小小明个人笔记,为学习和使用正则表达式提供了一个系统的资源。 Python正则表达式全套笔记v0.3 1.1 作者简介 小小明是数据处理专家,擅长解决各种复杂数据处理问题,并且提供了个人笔记,涵盖了正则...

    正则表达式学习笔记小结分享

    学习正则表达式能够帮助我们更好地处理复杂文本需求,如验证输入信息、查找和替换特定模式的文本,以及在大量日志和数据中提取关键信息。 正则表达式的语法结构通常是用斜杠 `/` 包裹模式,并可以加上可选的修饰符...

    java多线程反射泛型及正则表达式学习笔记和源码.zip

    这个压缩包包含的“java多线程反射泛型及正则表达式学习笔记和源码”正是针对这些关键知识点的学习资料。 首先,我们来详细探讨多线程。在Java中,多线程允许程序同时执行多个不同的任务,提高了程序的并发性和效率...

    北风网正则表达式详细讲解学习笔记

    本文主要基于北风网的正则表达式学习笔记,详细讲解了正则表达式的基本概念、常用模式以及在JavaScript中的应用。 首先,身份证号码的验证是一个常见的应用场景。例如,`/^(\d{15}$|^\d{18}$|^\d{17}(\d|X|x))$/` ...

Global site tag (gtag.js) - Google Analytics