与正则表达式匹配

时间:2017-01-24 03:18:35

标签: match

我正在阅读关于Ruby的介绍书,我无法理解正则表达式是如何工作的。有一个例子说写一个匹配以下字符串的正则表达式:

1)rby
2)rb

我能得到的最接近的是:

rb+y*

如何编辑表达式以使其匹配?不幸的是,我正在使用的书没有提供答案。

3 个答案:

答案 0 :(得分:3)

您可以检查字符串的开头和结尾

^rb+y*$

答案 1 :(得分:2)

字符串必须以一个“r”开头,所以我们从

开始
/\Ar

\A是一个字符串开头的锚点。接下来,有一两个"b"

/\Arb{1,2}

这可以选择性地跟随一个"y"

/\Arb{1,2}y?

最后,没有其他字符可以跟随可选的"y",因此我们添加了一个字符串结束锚并终止了正则表达式。

r = /\Arb{1,2}y?\z/

%w| rby rb rbby rbb |.all? { |s| s =~ r }     #=> true
%w| ruby rbyry rrby bby |.any? { |s| s =~ r } #=> false

r并不是唯一有效的正则表达式。 /\Arb+y?\z//\Arb+y*\z/也符合测试标准。

小点:\A\z分别是 string string 的开头,而{ {1}}和^的开头和的结尾。这里每个字符串由一行组成,因此可以使用任何一组锚点。虽然你经常会看到用于单行字符串的行尾锚点,但我相信大多数Rubiests认为你的代码是通过使用字符串结尾锚定时更清晰的,无论是否是你要锚定的字符串,无论是否是由一行或多行组成。

答案 2 :(得分:1)

您只需要匹配字符串/行的开头和结尾:

/^rb+y?$/

您可以test this and play with it here使用Rubular。

你正在阅读的书应该拼出这两个字符,但如果没有:

    表达式开头的
  • ^与行的开头匹配。表达式中的其他任何位置都表现不同。
  • 表达式末尾的
  • $匹配行的结尾。同样,表达式中的任何其他位置都表现不同。