Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 你怎么做?<;选项>;:`,`?:`,和`<;选项>;:正则表达式不同?_Ruby_Regex - Fatal编程技术网

Ruby 你怎么做?<;选项>;:`,`?:`,和`<;选项>;:正则表达式不同?

Ruby 你怎么做?<;选项>;:`,`?:`,和`<;选项>;:正则表达式不同?,ruby,regex,Ruby,Regex,我正在从文档中阅读Regex中的主题分组。我发现了一个示例,并开始使用它来理解?:中的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

我正在从文档中阅读Regex中的主题
分组
。我发现了一个示例,并开始使用它来理解
?:
中的
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-)
(:ca-)
(I:c-a)
)所执行的操作完全感到困惑。每个语法根据输出都是有效的,否则我可能从控制台得到错误

请任何人帮助我了解上述代码是如何生成输出的,以及
在Regex的
分组中的特殊角色是什么:

> %w{CASE case CAse caSE cASe casE}­.grep /(?i:­ca)se/
=> ["case", "CAse"] 
非捕获组
(?:模式)
,不区分大小写标志在
i
上。模式为
ca
。不区分大小写标志仅在非捕获组内有效,因此
ca
不区分大小写匹配,而
se
区分大小写匹配。这是一个有用的构造,可仅为部分正则表达式激活某些效果

非捕获组不会在组内存储与模式匹配的文本的位置,而捕获组
(模式)
)之后不以
开头

这只是一个普通的非捕获组,没有任何选项,
ca
作为模式。如文档所述,
(?:模式)
中的
可以为空。这里没有什么特别的,只需区分大小写匹配即可

> %w{CASE case CAse caSE cASe casE}­.grep /(:ca­)se/
=> []
这是一个捕获组,以
:ca
为模式(冒号
c
然后
a
)。当然,没有找到匹配项

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

再一次,一个捕获组,以
i:ca
为模式(
i
,冒号
c
,然后是
a
),也没有找到匹配项。

OMG!预期的但非常普通的解释。我喜欢它,也接受了。+1给你!
> %w{CASE case CAse caSE cASe casE}­.grep /(i:c­a)se/
=> []