Anchor \ z和\ G如何在Ruby中运行?

我使用的是Ruby1.9.3。 我是这个平台的新手。

从文档中我刚刚得到了两个anchor ,它们是\z\G 现在我和\z一起玩它看看它是如何工作的,因为定义( 字符串的 结束结束 )让我感到困惑,我无法理解它的含义 – 由End 。 所以我尝试了下面的小片段。 但仍然无法抓住。

 irb(main):011:0> str = "Hit him on the head me 2\n" + "Hit him on the head wit> => "Hit him on the head me 2\nHit him on the head with a 24\n" irb(main):012:0> str =~ /\d\z/ => nil irb(main):013:0> str = "Hit him on the head me 24 2\n" + "Hit him on the head > => "Hit him on the head me 24 2\nHit him on the head with a 24\n" irb(main):014:0> str =~ /\d\z/ => nil irb(main):018:0> str = "Hit1 him on the head me 24 2\n" + "Hit him on the head> => "Hit1 him on the head me 24 2\nHit him on the head with a11 11 24\n" irb(main):019:0> str =~ /\d\z/ => nil irb(main):020:0> 

每次我得到nil作为输出。 那么\z的计算方法是怎样的? End意味着什么? – 我认为我的概念在文档中的End词出错了。 所以任何人都可以帮助我了解发生这种情况的原因是什么?

而且我没有找到任何关于锚\G例子。 任何一个例子请你们让人们想象一下如何用于实时编程?

编辑

 irb(main):029:0> irb(main):030:0* ("{123}{45}{6789}").scan(/\G(?!^)\{\d+\}/) => [] irb(main):031:0> ('{123}{45}{6789}').scan(/\G(?!^)\{\d+\}/) => [] irb(main):032:0> 

谢谢

\z匹配输入的结尾。 您正在尝试找到输入结尾处出现4的匹配项。 问题是,输入结尾有一个换行符,所以找不到匹配项。 \Z匹配输入的结尾或输入结尾的换行符。

所以:

 /\d\z/ 

匹配“4”:

 "24" 

和:

 /\d\Z/ 

匹配上例中的“4”和“4”:

 "24\n" 

查看此问题,例如使用\G
Java中的正则表达式匹配器\ G(上一个匹配的结束)的例子会很好


更新:真实世界用于\G

我想出了一个更真实的例子。 假设您有一个由任意字符分隔的单词列表,这些单词无法很好地预测(或列出的可能性太多)。 你想匹配这些单词,其中每个单词都是自己的匹配,直到某个特定单词,之后你不想再匹配任何单词。 例如:

FOO,bar.baz:buz’fuzz *灏HAR / HAZ | FIL ^ BIL李明博

你想匹配每个单词,直到’har’。 您不希望匹配“har”或后面的任何单词。 您可以使用以下模式相对轻松地完成此操作:

 /(?<=^|\G\W)\w+\b(? 

rubular

第一次尝试将匹配输入的开头,后跟零非单词字符,后跟3个单词字符('foo'),后跟单词边界。 最后,负面的背后保证确保刚刚匹配的单词不是“har”。

在第二次尝试时,在最后一场比赛结束时匹配选秀权。 1个非单词字符匹配(',' - 虽然由于lookbehind而没有捕获,这是一个零宽度断言),后跟3个字符('bar')。

这一直持续到'har'匹配,此时触发负面的后视并且匹配失败。 因为所有匹配都应该“附加”到上一次成功匹配,所以不会匹配其他单词。

结果是:

 foo bar baz buz fuzz hoo 

如果你想要反转它并在'har'之后拥有所有单词(但是,再次,不包括'har'),你可以使用这样的表达式:

 /(?!^)(?<=har\W|\G\W)\w+\b/ 

rubular

这将匹配一个紧接在'har'之前的单词或最后一个匹配结束的单词(除了我们必须确保不匹配输入的开头)。 比赛列表是:

 haz fil bil bak 

如果你想匹配'har'和所有后面的单词,你可以使用这个:

 /\bhar\b|(?!^)(?<=\G\W)\w+\b/ 

rubular

这会产生以下匹配:

 har haz fil bil bak 

听起来你想知道Regex是如何工作的? 或者你想知道Regex如何使用ruby?

看看这些。

Regexp类描述

正则表达式教练 – 非常适合测试正则表达式匹配

正则表达式备忘单

我理解\ G是一个边界匹配字符。 所以它会告诉下一场比赛在最后一场比赛结束时开始。 也许既然你还没有比赛,你就得不到第二个了。

这是我能找到的最好的例子。 它不是ruby,但概念应该是相同的。

我把它拿回去可能更有用