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 正则表达式:匹配btn但不匹配.btn_Ruby_Regex_Haml - Fatal编程技术网

Ruby 正则表达式:匹配btn但不匹配.btn

Ruby 正则表达式:匹配btn但不匹配.btn,ruby,regex,haml,Ruby,Regex,Haml,在升级旧引导版本的过程中,我很难找到正确的正则表达式来处理用HAML代码编写类的各种方式 以下是.btn类如何在我的代码中出现的一些示例: %a.btn.btn-primary 或 在迁移Ruby脚本中,我可以很容易地通过以下行修复第一个版本(haml_string是包含我行的变量): 但我真的很难修复第二个版本,特别是因为第一个版本已经运行了。我已经尝试了以下方法(这是一种消极的方法,我会向前看,看看我们是否以某种方式匹配了我们在上一次运行中已经修复的.btn版本: haml_string.

在升级旧引导版本的过程中,我很难找到正确的正则表达式来处理用HAML代码编写类的各种方式

以下是
.btn
类如何在我的代码中出现的一些示例:

%a.btn.btn-primary

在迁移Ruby脚本中,我可以很容易地通过以下行修复第一个版本(
haml_string
是包含我行的变量):

但我真的很难修复第二个版本,特别是因为第一个版本已经运行了。我已经尝试了以下方法(这是一种消极的方法,我会向前看,看看我们是否以某种方式匹配了我们在上一次运行中已经修复的
.btn
版本:

haml_string.gsub(/btn\s(?<!\.btn)/, 'btn btn-default ')
haml_string.gsub(/btn\s(?)?
也许我只是站在这里的浴盆上,但作为一个普通的正则表达式用户,这对我来说似乎并不微不足道……任何提示都将不胜感激!

您的正则表达式
btn\s(?因为反向查找
(?)在“代码> BTN < /代码>之后,一个空格字符被匹配。考虑一个<代码> BTN 123 < /Cord>字符串:<代码> BTN<代码>匹配,然后匹配该空间,并且查找后面返回true,因为<代码> BTN < /代码>不等于<代码> .btn > /p>
为了使模式正常工作(在某种程度上),您可以将lookback移动到
\s
::之前。在这种情况下,匹配
btn
后,正则表达式引擎会确保当前位置左侧没有
。btn

但是,您的模式看起来似乎希望将
btn
作为一个整体匹配。 因此,我建议按以下方式固定模式(请参阅):

/\bbtn\b(?)?
或者,将其缩短一点(如前所述):

/(?
请参阅。请注意,此版本效率更高,因为只有在
之前未出现时,它才必须匹配
btn
(它不必检查出现在不匹配上下文中的单词边界和
btn

如果要了解有关定位lookbehinds的更多详细信息,请参阅

图案细节

  • (?-如果当前位置左侧立即出现
    ,则会导致匹配失败的反向查找
  • \b
    -单词边界
  • btn
    -a
    btn
    word
  • \b
    -单词边界

关于
(??不太确定您要完成什么。如果您发布一些示例输入及其预期输出,可能会更容易为您提供帮助。一般来说,您应该转义所有这些句点,以便它们匹配文字
是的,我已经更新了第一个版本以转义。我同意ctwheels。首先,您正在匹配“.btn”。所以你的标题是错误的。第二,你给出的预期输入和输出为零。第三,你没有给出错误。我们不是千里眼。另外:你的第一个替换是寻找“(点)btn(空格)(通配符)”,根据你的输入,它甚至不是一个用例!
haml_string.gsub(/(.*)\.btn\s(.*)/, '\1.btn .btn-default \2')
haml_string.gsub(/btn\s(?<!\.btn)/, 'btn btn-default ')
/\bbtn\b(?<!\.btn)/
/(?<!\.)\bbtn\b/