Ruby 你怎么做?<;选项>;:`,`?:`,和`<;选项>;:正则表达式不同?
我正在从文档中阅读Regex中的主题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 /(?:ca)se/ # => ["case"] %w{CASE case CAse caSE cASe casE}.grep
分组。我发现了一个示例,并开始使用它来理解?:中的Regex
。该代码用于按如下方式显示:
%w{CASE case CAse caSE cASe casE}.grep /(?i:ca)se/
# => ["case", "CAse"]
%w{CASE case CAse caSE cASe casE}.grep /(?:ca)se/
# => ["case"]
%w{CASE case CAse caSE cASe casE}.grep /(:ca)se/
# => []
%w{CASE case CAse caSE cASe casE}.grep /(i:ca)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:ca)se/
=> []
再一次,一个捕获组,以i:ca
为模式(i
,冒号:
,c
,然后是a
),也没有找到匹配项。OMG!预期的但非常普通的解释。我喜欢它,也接受了。+1给你!
> %w{CASE case CAse caSE cASe casE}.grep /(i:ca)se/
=> []