什么 Raku 正则表达式修饰符使点匹配换行符(如 Perl 的 /s)?

What Raku regex modifier makes a dot match a newline (like Perl's /s)?

如何使点 (.) 元字符匹配 Raku 正则表达式中的换行符?在 Perl 中,我会使用 dot matches newline modifier (/s)?

TL;DR “Perl 点匹配换行符”的 Raku 等价物是 .\Q...\E...

对于像这样的大多数问题,有一些方法可以更好得到答案(比 SO 答案更权威、更全面等)更容易 (通常只需输入感兴趣的搜索词)和 quickly(通常是几秒钟,最多几分钟)。我在这个答案中解决了这个问题。

“Perl 点匹配换行符”的 Raku 等价物是什么?

.

如果您 运行 以下 Raku 程序:

/./s

您将看到以下错误消息:

Unsupported use of /s.  In Raku please use: .  or \N.

如果您在文档站点的搜索框中键入 .,它会列出多个条目。其中之一是 . (regex)。单击它提供示例并显示:

An unescaped dot . in a regex matches any single character. ...
Notably . also matches a logical newline \n

我的猜测是你在 SO 上提问之前没有寻找答案(这很公平——我并不是说不要;也就是说,如果你经常可以很容易地立即得到好的答案查看正确的地方,我将在这个答案中介绍)或者对你得到的答案不满意(在这种情况下,再次阅读)。

如果我只是重复了你已经读过的内容,或者信息不够,我会在下面提供一个更好的答案,在我写下 initial 尝试之后为您的 \Q...\E 问题给出类似的答案 - 当我尝试文档步骤时 失败

Perl 的 Raku 等价物是什么 \Q...\E

'...',或 $foo 如果 ... 是变量名的元语法。

如果您 运行 以下 Raku 程序:

/\Qfoo\E/

您将看到以下错误消息:

Unsupported use of \Q as quotemeta.  In Raku please use: quotes or
literal variable match.

如果您在文档站点的搜索框中键入 \Q...\E,它只会列出一个条目:Not in Index (try site search)。如果您继续尝试按照建议进行搜索,您将根据 google 获得匹配的页面。对我来说,第三个 page/match 列出(Perl 到 Raku 指南 - 简而言之:“使用 String::ShellQuote(因为 \Q…\E 并不完全正确)。 ..") 是 27 个匹配项中 \Q...\E 的唯一真正匹配项。 显然不是您感兴趣的

因此,在文档中搜索 \S...\E 似乎完全失败了。


如何获得诸如“Raku 等同于 Perl 的 \Q...\E 是什么?”这样的问题的答案。如果文档站点没有帮助(并且没有意识到 Rakudo 恰好有一个内置的错误消息专门针对感兴趣的确切事物 and/or 不确定错误消息的含义)? Rakudo 和文档站点都没有说明问题怎么办?

SO 是一种选择,但是是什么让对 Raku 感兴趣的人们经常good/great 轻松快速[=163= 得到他们问题的答案] 当他们无法从文档站点获取答案时,因为很难找到答案或根本不存在于文档中?

比询问 SO Q 更容易获得更好的答案

文档网站并不总能为简单的问题提供好的答案。有时,正如我们在 \Q...\E 案例中清楚看到的那样,对于相关搜索词,它根本不会产生 任何答案

幸运的是,当文档站点不适用于某些类型的 info/searches 时,还有其他几个易于搜索的丰富且高度相关的信息来源通常有效。如果您有精确的搜索词,例如 /s\Q...\E and/or 愿意浏览信息,只要它是高信号/低噪音,这尤其有可能。我将在本回答的其余部分介绍其中两种资源。

存档的“规范”文档

Raku 的设计主要由拉里·沃尔 (Larry Wall) 在长达 2 年的时间里撰写的一系列“规范”文档中编写。

(“specs”一词是“规范推测”的缩写。它是 Raku 语言的超权威详细和精确 spec化,主要由 Larry Wall 本人撰写,并且仅仅是 speculations -- 因为这一切都取决于实施。这两个方面纠缠在一起,现在 out-of-date。所以不要 100% 依赖它们 - - 但也不要忽略它们。)

“规范”,又名设计文档,是一种极好的资源。您可以在 design.raku.org.

的搜索框中输入搜索词,使用 google 搜索它们

搜索 /s 会列出 25 页。唯一有用的匹配项是 Synopsis 5: Regexes and Rules(“2002 年 6 月 24 日 - 没有 /s/m 修饰符(对 meta-characters 的更改替换了它们 - 见下文)。”单击它。然后执行 in-page 搜索 /s (注意 space)。您将看到 3 个匹配项:

There are no /s or /m modifiers (changes to the meta-characters replace them - see below)

A dot . now matches any character including newline. (The /s modifier is gone.)

. matches an anything, while \N matches an anything except what \n matches. (The /s modifier is gone.) In particular, \N matches neither carriage return nor line feed.


搜索 \Q...\E 会列出 7 页。唯一有用的匹配还是 Synopsis 5: Regexes and Rules(“2002 年 6 月 24 日 — \Q$var\E / ...”)。点击它。然后 in-page 搜索 \Q。您将看到 2 个匹配项:

In Raku / $var / is like a Perl / \Q$var\E /

\Q...\E sequences are gone.

聊天记录

我扩展了 Quicker answers 部分来讨论搜索 Raku“聊天记录”。它们是一个极其丰富的信息宝库,具有出色的搜索功能。请阅读我之前回答的那部分以获得明确的一般指导。此答案的其余部分将说明 /s\Q...\E


A search for the regex / newline . ** ^200 '/s' / in the old Raku channel from 2010 thru 2015 found this match:

. matches an anything, while \N matches an anything except what \n matches. (The /s modifier is gone.) In particular, \N matches neither carriage return nor line feed.

请注意我的正则表达式的精明之处。模式是单词“换行符”(希望它不太常见),后跟两个字符序列 /s(我怀疑它比 newline 更常见)在 200 个字符内。我限制在 2010-2014 年,因为在整个 15 年的旧 Raku 频道中搜索正则表达式会对 Liz 的服务器造成负担并超时。在尝试找到 /s(不是 end-of-sarcasm!)的合适匹配项的几分钟内,我得到了上面引用的那个命中。


A search for \Q in the old Raku channel 立即获得成功。在想到“我可以搜索日志”的 30 秒内,我得到了一堆有用的匹配项。