- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我正在使用 Ruby1.9.3。我是这个平台的新手。
来自doc我刚刚熟悉了两个anchor
,它们是\z
和\G
。现在我稍微玩了一下 \z
看看它是如何工作的,因为定义(End 或 End of String)让我感到困惑,我无法理解它的意思 - by 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
词有任何错误。所以任何人都可以帮助我了解发生的原因以及为什么会发生这种情况?
而且我也没有找到 anchor \G
的任何例子。请大家举例说明 \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
为例:
Examples of regex matcher \G (The end of the previous match) in Java would be nice
更新:\G
的实际用途
我想出了一个更真实的例子。假设您有一个单词列表,这些单词由无法很好预测的任意字符分隔(或者列出的可能性太多)。您想要匹配这些单词,其中每个单词都是自己的匹配项,直到一个特定的单词,之后您不想再匹配任何单词。例如:
foo,bar.baz:buz'fuzz*hoo-har/haz|fil^bil!bak
您想匹配每个单词直到“har”。您不想匹配“har”或后面的任何单词。您可以使用以下模式相对轻松地完成此操作:
/(?<=^|\G\W)\w+\b(?<!har)/
第一次尝试将匹配输入的开头,然后是零个非单词字符,然后是 3 个单词字符('foo'),然后是单词边界。最后,负向回顾确保刚刚匹配的单词不是“har”。
在第二次尝试时,匹配会在最后一场比赛结束时重新开始。匹配了 1 个非单词字符(',' - 尽管它由于后向查找而未被捕获,这是一个零宽度断言),后跟 3 个字符('bar')。
这一直持续到“har”被匹配,此时负向回顾被触发并且匹配失败。因为所有匹配项都应该“附加”到最后一个成功的匹配项,所以不会匹配其他单词。
结果是:
foo
bar
baz
buz
fuzz
hoo
如果你想反转它并让所有单词都在 'har' 之后(但同样不包括 'har'),你可以使用这样的表达式:
/(?!^)(?<=har\W|\G\W)\w+\b/
这将匹配紧接在“har”之前的单词或最后一个匹配项的结尾(除非我们必须确保不匹配输入的开头)。匹配列表是:
haz
fil
bil
bak
如果你确实想匹配'har'和后面的所有单词,你可以使用这个:
/\bhar\b|(?!^)(?<=\G\W)\w+\b/
这会产生以下匹配项:
har
haz
fil
bil
bak
关于ruby - Anchor\z 和\G 在 Ruby 中是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14365969/
我目前正在尝试让 g++ 工作,并查看 http://gcc.gnu.org/install/build.html ,我似乎找不到它在哪里说如何“执行编译器的 3 阶段 bootstrap ”。我在哪
James Powell 在他对即将举行的演示文稿的简短描述中说,他自豪地发明了最粗糙的 Python 单行代码之一: (None for g in g if (yield from g) and F
请告诉我我的证明是否正确 We have a connected graph, and specific vertex u in V(G). Suppose we compute the dfs tr
下面的test2和test3结果是不同的。 我对此感到困惑,因为它看起来像相同的逻辑,并且与linux bash ||逻辑不同。 $data = @( [PSCustomObject]@{St
我试图找到一个明确的 G 代码语法规范,而不是单个 G 代码的含义,我无处不在的规范,我的意思是详细的语法规范,目的是编写解析器。 我编写解析器没有问题,我只是在寻找语法规范,例如。我知道您不必总是为
我写了这个 mixin,但它循环了很多时间。你能帮我优化我的代码吗?或者你能建议一些其他的东西来获得想要的结果吗? dfgdfgsdfgsdf 最佳答案 希望这就是您要找的。 $spaces: (4,
默认情况下,g++ 似乎会省略未使用的类内定义方法的代码。示例 from my previous question : struct Foo { void bar() {} void baz(
是否可以将文件内容通过管道传送到 g++编译程序? 我想这样做是因为我想使用数据库中的文件而不是磁盘上的物理文件。可以通过我制作的 API 轻松检索文件内容。 例如,我想做这样的事情: g++ con
如何profile c++代码获取每行代码的调用次数和消耗时间,就像profile工具一样在 Matlab 中呢? 我尝试使用-fprofile-arcs之类的东西,但它只生成代码覆盖率报告,其中可以
如何在几行代码上禁用所有警告。可以使用 GCC 诊断功能禁用特定警告,但是否有针对所有警告的标志。我尝试了这个方法,但不起作用 #pragma GCC diagnostic push #pragma
我有一个链接到 opencv 2.2 的可执行文件。但是,我删除了 opencv 2.2 并安装了 opencv 2.3。 问题是,有没有办法在不重新编译整个源代码的情况下将这个可执行文件链接到新的共
在编译带有一些标志的以下文件时,是否可以让 g++ 显示错误? #include using namespace std; int main() { int arr[ 2 ]; cout
在学习 Haskell 时,我遇到了一个挑战,要找到两个函数 f 和 g,例如 f g 和 f 。 g 是等价的(并且是总计,因此像 f = undefined 或 f = (.) f 这样的东西不算
根据我的理解,Theta 位于 Big O 和 Omega 之间,但我看到了这个声明,但我无法理解为什么交集会出现在这里。我能否对 Θ(g(n)) = O(g(n)) ∩ Ω(g(n)) 获得数学和分
我需要为这个递归函数编写一个迭代函数。 int funcRec(int n){ if(n>1) { return 2*funcRec(n - 1) + 3*funcRec(n
我在 github repository 上有代码示例并在 travis-ci 上创建了一个构建便于复制。 最小的、完整的和可验证的例子 可能不是最小的,但我相信它足够小 它使用 boost.inte
编辑:我们将调用箭头 p纯如果存在这样的函数f即:p = arr f . 我试图更好地掌握 Haskell 中的 Arrows,我想弄清楚什么时候 f >>> (g &&& h) = (f >>> g
我有两个(或更多)函数定义为: val functionM: String => Option[Int] = s => Some(s.length) val functionM2: Int => Op
好像是的。任何直观或严肃的证据都值得赞赏。 最佳答案 没有。 我认为您的问题等同于:给定函数 f 和 g,f 是 O(g) 或 g 是 O(f) 是否总是正确的?这在 SE Computer Scie
如果我设法证明 f(n) = o(g(n))(小 o),那么这两个函数的总和 f( n) + g(n) 应该被“更大”的函数 g(n) 紧紧束缚。 然而,我在证明这一点时遇到了一些麻烦。 最佳答案 以
我是一名优秀的程序员,十分优秀!