ruby1.9:
-
/\p{Word}+/u
不限于 a-z0-9 的成词字符(就是非标点制表符空格等杂类的字符) -
/\p{Hiragana,Katakana}+/u
匹配平假名+片假名 - 匹配汉字用
/\p{Han}+/u
就可以了 - 详情看文档。
ruby1.8 针对各种编码的正则: https://gist.github.com/luikore/149493
一个在线的Ruby正则表达式编辑器:Rubular
一般规则(为正常显示,都放在代码块内)
/a/匹配字符a。
/\?/匹配特殊字符?。特殊字符包括^, $, ? , ., /, \, [, ], {, }, (, ), +, *.
.匹配任意字符,例如/a./匹配ab和ac。
/[ab]c/匹配ac和bc,[]之间代表范围。例如:/[a-z]/ , /[a-zA-Z0-9]/。
/[^a-zA-Z0-9]/匹配不在该范围内的字符串。
/[\d]/代表任意数字
/[\w]/代表任意字母,数字或者_
/[\s]/代表空白字符,包括空格,TAB和换行。
/[\D]/,/[\W]/,/[\S]/均为上述的否定情况。
高级规则
?代表0或1个字符。/Mrs?\.?/匹配"Mr","Mrs","Mr.","Mrs."。
*代表0或多个字符。/Hello*/匹配"Hello","HelloJack"。
+代表1或多个字符。/a+c/匹配:"abc","abbdrec"等等。
/d{3}/匹配3个数字。
/d{1,10}/匹配1-10个数字。
/d{3,}/匹配3个数字以上。
/([A-Z]\d){5}/匹配首位是大写字母,后面4个是数字的字符串。
正则表达式操作
String和RegExp均支持=~
和match
两个查询匹配方法:
puts "I can say my name" =~ /name/ #-> 13
a = /name/.match("I can say my name, my name I can say") #-> a is MatchData
puts a[0] #-> name
可以看出,如果能够匹配,=~返回匹配的字符串位置,而match返回一个MatchData对象。如果不匹配,则返回nil。MatchData可以取出其中符合各个子匹配(或子模式)
的内容,看下面的例子:
b1=/[A-Za-z]+,[A-Za-z]+,Mrs?\./.match("Jack,Wang,Mrs., nice person")
puts b1[0] #-> Jack,Wang,Mrs
b2=/(([A-Za-z]+),([A-Za-z]+)),Mrs?\./.match("Jack,Wang,Mrs., nice person:)
puts b2[0] #-> Jack,Wang,Mrs
puts b2[1] #-> Jack,Wang
puts b2[2] #-> Jack
puts b2[3] #-> Wang
m[0]返回匹配匹配主表达式
的字符串,下面的方法是等同的:m[n]==m.captures[n]
Ruby也自动的为我们填写一些全局变量,它们以数字做名,$1, $2, 等等,$1包含的是正则表达式中从左侧开始的第一对小括号内的子模式所匹配的字符串,以此类推。我们看出匹配时,是从外到内,从左到右的顺序。
贪婪量词和不贪婪量词
量词*(表示零个或多个)
和+(表示一个或多个)
是贪婪的,它们会匹配尽可能多的字符,我们可以在*和+后面加一个?
,使它成为非贪婪量词
下面代码是: 1个或多个字符后接一个感叹号。
teststr="abcd!efg!"
match=/.+!/.match(teststr)
puts match[0] #-> abcd!efg!
limitmatch=/.+?!/.match(teststr)
puts limitmatch[0] #-> abcd!
锚
锚是指必须满座一定的条件,才能继续匹配:
^ 行首
$ 行尾
\A 字符串的开始
\z 字符串的结尾
\Z 字符串的结尾(不包括最后的换行符)
\b 单词边界
c=/\b\w+\b/.match("!!Stephen**")
puts c[0] #-> Stephen
前视断言
前视断言表示想要知道下一个指定的是什么,但并不匹配
- 肯定的前视断言
(?=)
假设我们想要匹配一个数的序列,该序列以一个圆点结束,但并不想把圆点作为模式匹配的一部分
teststr="123 456 789. 012"
m=/\d+(?=\.)/.match(teststr)
puts m[0] #-> 789
- 否定的前视断言
(?!)
上例,如果/\d+(?=\.)/
改为/\d+(?!\.)/
,则puts m[0]
输出显示为 123 。
修饰语
修饰语位于正则表达式最结束正则表达式的正斜杠的后面
-
i
使正则表达式对大小写不敏感
例如,/abc/i
可以匹配Abc,abc,ABC等。
-
m
使得正则表达式可以和任何字符匹配,包括换行符,通常情况下圆点通配符不匹配换行符。
字符串与正则表达式的相互转换
- 字符串内插进正则表达式
teststr="a.c"
re=/#{Regexp.escape(teststr)}/
puts re.match("a.c")[0] #-> a.c
test=re.match("abc")
puts test[0] #-> Nil
- 正则表达式转换成字符串
puts /abc/.inspect #-> /abc/
使用正则表达式的常见方法
-
用于if和while等
-
用于gsub、grep等
-
用于find_all、scan等
例如,puts "test 1 2 and test 3 4".scan(/\d/)
会输出["1","2","3","4"]。
相关推荐
正则表达式不仅限于Python,许多编程语言都支持正则表达式,包括Java、JavaScript、Perl、Ruby等。 正则表达式的组成部分: 1. 字符:包括字母、数字、特殊字符等。 2. 元字符:包括.、*、+、?、{、}、[、]、\、^...
这是一款正则匹配工具,正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个...
6. **正则表达式**:Ruby支持强大的正则表达式,用于文本匹配和操作。 7. **元编程**:Ruby允许在运行时修改自身,这是其独特之处。将学习到`eval`、`send`、`define_method`等元编程技巧。 8. **块、 Proc 和 ...
正则表达式作为一个强大的工具,在处理文本和数据时拥有极高的效率和灵活性,被广泛应用于多种编程语言和流行工具中,比如Perl、Python、Ruby、Java、***、C#(以及任何使用.NET框架的语言)、PHP和MySQL。...
正则表达式用于匹配和搜索文本模式。 ```ruby regex = /hello/ ``` #### 五、代码块和迭代器 **5.1 代码块** 代码块是一种可以传递给方法的匿名函数,可以用来封装一段代码逻辑。 ```ruby (1..5).each do |i| ...
本书不仅适用于通过Rails框架接触Ruby的程序员,也适合希望利用Ruby的强大、简洁和表达能力进行其他应用程序开发的开发者。 #### 三、核心知识点详解 ##### 1. 关键词、操作符、注释、数字和符号 - **关键词**:...
一种轻量级(可选)的表达语言,具有用于匹配任意Python对象的自定义语法。 可从获得文档。 规则引擎表达式以其自己的语言编写,在Python中定义为字符串。 语法与Python最相似,其灵感来自Ruby。 该语言的一些...
另外,Ruby还提供正则表达式(Regexp)类,方便进行文本模式匹配。 **文件与I/O** Ruby提供了丰富的文件操作和输入/输出(I/O)函数,包括读写文件、处理标准输入输出和重定向等。`File`和`IO`类是进行这些操作的...
8. **正则表达式(Regexp)**:Ruby支持强大的正则表达式操作,可以用于文本匹配、替换和提取。练习可能包含编写正则表达式来处理特定的文本模式。 9. **异常处理(Exception Handling)**:Ruby中的begin-rescue-...
4. **正则表达式**:在处理文本输入和模式匹配时,Ruby的正则表达式(Regexp)是强大的工具。AOC挑战中,常常需要解析输入字符串,正则表达式可以简化这个过程。 5. **元编程**:Ruby允许在运行时修改类和对象的...
5. **正则表达式**:掌握Ruby中的正则表达式,用于文本匹配和处理,这是很多编程任务中的关键工具。 6. **编译器与解释器**:了解编译器和解释器的工作原理,以及如何构建一个简单的解释器。 7. **逻辑与推理**:...
3. **正则表达式**:Ruby的正则表达式功能强大,常用于生物序列的匹配、提取和替换,例如查找特定的DNA或蛋白质序列模式。 4. **数据结构**:Ruby的数组和哈希(关联数组)对于存储和操作生物数据非常有用,例如...
Ruby的正则表达式提供了强大的文本匹配功能,可以用于查找、替换和分割字符串。 ### 11. Shell命令与系统交互 `system`、`exec`、`spawn`等方法允许Ruby程序调用系统命令,与操作系统进行交互。 在"ls-rb101"这个...
路由是将特定的URL映射到相应的处理函数,你可以使用正则表达式进行复杂的路由匹配。 4. **模板引擎ERB**:ERB(Embedded Ruby)是Ruby中常用的模板引擎,它允许在HTML中嵌入Ruby代码,以便动态生成页面内容。在...
4. **数据处理**:处理从API获取的文本信息,进行分析和分类,可能涉及到字符串操作、正则表达式匹配或其他文本处理技巧。 5. **条件判断**:根据项目名称,可能包含判断逻辑,根据特定标准将数据分为"TO"和"KU"两类...
Groovy内置了对正则表达式的支持,提供了大量的方法来匹配、查找和替换字符串中的模式。 异常处理: Groovy中的异常处理与Java类似,可以使用try-catch-finally语句块来捕获和处理异常。Groovy还提供了一些便捷的...
2. **匹配Gherkin步骤**:使用正则表达式来匹配Gherkin步骤。在这个例子中,我们使用`^我关闭并重新打开浏览器$`作为步骤的文本。在Java中,你可以这样写: ```java @When("^我关闭并重新打开浏览器$") public ...
这个库的亮点在于它的灵活性和表达能力,能够处理上下文无关语法(Context-Free Grammar, CFG)以及上下文敏感语法(Context-Sensitive Grammar)。在Crystal编程语言中,Marpa库提供了一个接口,使得Crystal程序员...