繁体   English   中英

Ruby正则表达式和括号。 括号是做什么的?

[英]Ruby regular expressions and bracket. What do the brackets do?

我正在阅读Peter Cooper的书“ Beginning Ruby”,并且对一些字符串方法和正则表达式用法有一些疑问。 我想我对什么是正则表达式很清楚:“一个描述与其他字符串中的元素匹配的模式的字符串”。

所以:

"This is a test".scan(/\w\w/) {|x| puts x}

Output:
Th
is
is
te
st
=> "This is a test"
  1. 因此它一次打印两个字符。 我没有意识到它还会返回原始字符串。 为什么是这样?

也,

    "This is a test".scan(/[aeiou]/) { |x| puts x }
  1. 括号是做什么的? 我认为它们被称为字符类,但是我不确定它们到底是做什么的。 库珀书中的解释并不十分冗长和清晰。

字符类说明:

“在此阶段,您需要了解的正则表达式的最后一个重要方面是字符类。它们使您可以与一组特定的字符进行匹配。例如,您可以扫描字符串中的所有元音:”

是的,它称为字符类

字符类定义一组字符。 说“匹配类指定的一个字符”。 字符类的两个实现被视为正类[ ]和负类[^ ] 正字符类允许您定义而负类允许您定义不能出现在一个字符串匹配项的字符列表出现匹配字符的列表,其中任何一个都可能会出现在一个字符串发生。

角色类别的说明:

[aeiou]    # any character of: 'a', 'e', 'i', 'o', 'u'
  1. scan方法通常返回具有匹配项的数组,但可以选择接受一个块,这等效于对each结果数组进行处理。

    这是文档: http : //www.ruby-doc.org/core-2.1.3/String.html#method-i-scan

  2. 对于第二个问题,@ hwnd已经给您一个明确的答案。 最好的学习方法是进行实验, regex101.com是我通常使用的在线工具。 它列出了所有匹配元素的说明,因此也是很好的学习资源。

    您可能想尝试的一些方法:

    1. 123abab12ab1234 ,模式为[123]
    2. 123abab12ab1234 ,模式为[ab]+
    3. 图案为b[1|a] 123abab12ab1234

要记住的一件事是,一个字符类匹配一个字符,例如:

str = 'XXXaeiouXXX'
puts str
str.sub!(/[aeiou]/, '.')
puts str

--output:--
XXXaeiouXXX
XXX.eiouXXX

字符类说:“匹配此字符或此字符或此字符...一次”。

还要检查ruular:

http://rubular.com/

我没有意识到它还会返回原始字符串。 为什么是这样?

这样就可以将方法链接在一起:

my_str.scan(...).downcase.capitalize.each_char {|char| puts char}.upcase.chomp

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM