0

我正在从文档Groupinggrouping中阅读Regex 中的主题。我在那里找到了一个示例并开始使用它来了解 in 的行为/角色。该代码用于undersatnd它如下:?<option>:Regex

%w{CASE case CAse caSE cASe casE}­.grep /(?i:­ca)se/
# => ["case", "CAse"] 
%w{CASE case CAse caSE cASe casE}­.grep /(?:c­a)se/
# => ["case"]
%w{CASE case CAse caSE cASe casE}­.grep /(:ca­)se/
# => []
%w{CASE case CAse caSE cASe casE}­.grep /(i:c­a)se/
# => []

现在我对(?i:­ca, (?:c­a)se, (:ca­),执行的操作完全感到困惑(i:c­a)。根据输出,每种语法都是有效的,否则我可能会从控制台收到错误。

谁能帮我理解上面的代码是如何生成输出的,以及其中的特殊角色是?<option>:什么grouping of Regex

4

1 回答 1

1
> %w{CASE case CAse caSE cASe casE}­.grep /(?i:­ca)se/
=> ["case", "CAse"] 

非捕获组(?<option>:pattern),带有不区分大小写的标志i。模式是ca。不区分大小写标志仅在非捕获组内有效,因此ca匹配不区分大小写,而se匹配区分大小写。这是一个有用的构造,可以仅激活部分正则表达式的某些效果。

非捕获组不会存储组内与模式匹配的文本的位置,而不是捕获(pattern)不以?after开头的组(

> %w{CASE case CAse caSE cASe casE}­.grep /(?:c­a)se/
=> ["case"]

这只是一个普通的非捕获组,没有任何选项,带有caas 模式。如文档所述,<option>in(?<option>:pattern)可以为空。这里没有什么特别的,只是区分大小写匹配。

> %w{CASE case CAse caSE cASe casE}­.grep /(:ca­)se/
=> []

这是一个捕获组,具有:caas 模式(冒号:c然后a)。当然,找不到匹配项。

> %w{CASE case CAse caSE cASe casE}­.grep /(i:c­a)se/
=> []

同样,一个捕获组,具有i:caas 模式 ( i, 冒号:, c, then a)。也找不到匹配项。

于 2013-01-17T15:43:07.163 回答