gpt4 book ai didi

Ruby:为什么等号在文字正则表达式中会导致解析错误?

转载 作者:数据小太阳 更新时间:2023-10-29 07:07:34 24 4
gpt4 key购买 nike

这些解析和执行良好:

"=".scan(/=/)
"=".scan (/=/)

这会导致“未终止的正则表达式遇到文件结尾”:

"=".scan /=/

如果我在 = 之前插入一些内容,错误就会消失:

"=".scan /^=/

这是怎么回事?

最佳答案

我猜你正在点击 this in the parser :

case '/':
if (IS_BEG()) {
lex_strterm = NEW_STRTERM(str_regexp, '/', 0);
return tREGEXP_BEG;
}
if ((c = nextc()) == '=') {
set_yylval_id('/');
lex_state = EXPR_BEG;
return tOP_ASGN;
}

请注意 nextc() 检查第二个 if。作为引用,tOP_ASGN is :

%token <id> tOP_ASGN    /* +=, -=  etc. */

因此它用于运算符(operator)分配 token 。

这表明 /=/

'='.scan /=/

被视为除法赋值运算符 (/=) 后跟一个开始正则表达式 (/)。

你会遇到麻烦(有点不同):

' ='.scan / =/

但不是这个:

' ='.scan(/ =/)

当方法调用没有括号时,通常会出现歧义。在这种情况下,我认为运算符优先规则适用,这不是您所期望的。

我倾向于在我所有的方法调用上加上括号,因为我太老了,脾气暴躁,不想担心解析器的行为。

关于Ruby:为什么等号在文字正则表达式中会导致解析错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12804298/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com