Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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
Regex 新手正则表达式问题确定是否在操作系统中可执行_Regex_Ruby - Fatal编程技术网

Regex 新手正则表达式问题确定是否在操作系统中可执行

Regex 新手正则表达式问题确定是否在操作系统中可执行,regex,ruby,Regex,Ruby,我在匹配此输出的“是”字符串部分时遇到问题(如果不存在可执行文件,我会假设它说“否”,但可能有更好的跨平台解决方案?) 这是我写的代码: require 'mkmf' logs = find_executable 'docker-compose' if logs.match(/yes/) puts "hi" else puts "bye" end 它不停地说“再见” 我做错了什么?您有几个问题: logs变量不包含您认为它的功能正在检查dock

我在匹配此输出的“是”字符串部分时遇到问题(如果不存在可执行文件,我会假设它说“否”,但可能有更好的跨平台解决方案?)

这是我写的代码:

require 'mkmf'

logs = find_executable 'docker-compose'
if logs.match(/yes/)
  puts "hi"
else
  puts "bye"
end
它不停地说“再见”


我做错了什么?

您有几个问题:

  • logs变量不包含您认为它的功能<代码>正在检查docker compose。。。是打印到标准输出,但不会作为值返回或存储在日志中。相反,在当前代码中,变量只包含程序的路径(如果找到),或者是nil,因此regexp永远不会匹配
  • 返回MatchData对象。要返回显式的true/false值,而不是依赖MatchData对象的真实性,请将其替换为方法
  • 另一种方法依赖于直接使用表达式的真实性。例如:

    require 'mkmf'
    
    p find_executable('docker-compose') ? 'found' : 'not found'
    #=> "found"
    
    p find_executable('no-such-file') ? 'found' : 'not found'
    #=> "not found"
    
    如果愿意,您当然可以使用if-then或case语句,但三元运算符提供了一种更简洁的方式来表达原始帖子的语义

    require 'mkmf'
    
    p find_executable('docker-compose') ? 'found' : 'not found'
    #=> "found"
    
    p find_executable('no-such-file') ? 'found' : 'not found'
    #=> "not found"