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_Docker - Fatal编程技术网

Ruby 正则表达式的过早结束:/[^]+/

Ruby 正则表达式的过早结束:/[^]+/,ruby,docker,Ruby,Docker,我正在尝试使用NLP工具[下义词提取工具]来处理一些日语文本文件。顺便说一下,我在docker容器上运行它 docker操作系统映像:Ubuntu 18.04 docker版本:18.06.0-ce ruby版本:1.8.7-p375 rbenv版本:1.1.1-39-g59785f6 jcode.rb 11:def _regex_quote(str) str.gsub(/(\\[\[\]\-\\])|\\(.)|([\[\]\\])/) do $1 || $2 || '\\' + $3

我正在尝试使用NLP工具[下义词提取工具]来处理一些日语文本文件。顺便说一下,我在docker容器上运行它

  • docker操作系统映像:Ubuntu 18.04
  • docker版本:18.06.0-ce
  • ruby版本:1.8.7-p375
  • rbenv版本:1.1.1-39-g59785f6
jcode.rb

11:def _regex_quote(str)
str.gsub(/(\\[\[\]\-\\])|\\(.)|([\[\]\\])/) do
  $1 || $2 || '\\' + $3
end
end
 private :_regex_quote
151:def delete!(del)
return nil if del == ""
self.gsub!(DeletePatternCache[del] ||= /[#{_regex_quote(del)}]+/, '')
end
del_mark.rb

103:REG_PAREN = /[#{Regexp.quote((PAREN.keys+PAREN.values).join(''))}]/
    REG_BPAREN = /^([#{Regexp.quote(PAREN.keys.join(''))}])/
    (main.opts).on('-p','--end-paren','先頭と末尾の括弧のみ取り除く'){|d|
      options[:pat] = Array.new if options[:pat] == FULL_SET
      options[:pat].push(REG_BPAREN)
    }
    (main.opts).on('-P','--only-paren','括弧のみ_に置き換え'){|d| 
      options[:pat] = Array.new if options[:pat] == FULL_SET
      PAREN_OUT= '_'
      options[:pat].push(REG_PAREN)
   }
   #(main.opts).on('-d','--date'){
   #options[:pat].push(REG_DATE)
   #}
  (main.opts).on('-r','--remove'){
    options[:remove]=true
  }

    main.option
130:(ARGV+[$stdin]).each{|file|
    fi = file
    if file != $stdin
      fi = open(file)
    end
    main.input = fi 
    #puts "F:#{file}";
   138: main.exec{|line|
      unless line 
        main.is_line_write = false
        next
      end
  163:line.each_char{|char|
  #puts "C:#{char}"
  165:options[:pat].each{|pat|
        if pat == REG_BOU || pat == REG_BPAREN
        elsif pat == REG_PAREN
          char =char.sub(REG_PAREN,PAREN_OUT)
        else 
          reg = check_reg(char,pat)
          if reg
       # line.delete
       173:line.delete!("#{char}")
      # line.delete!("#{char[0,1]}\s?")
      # line = line[0..nchar-1] + line[nchar+char.size..line.size-1]
      # line.delete!(Regexp.quote(char))
        line.gsub!(reg,'')
        flag = true
        break
      end
    end
Cut.rb

if @is_data_array
    cd = Array.new
    @column.each{|c|
      cd.push(data[c])
    }
    func.call(cd)
  else
158: @column.each{|c|
      #puts "LINE:#{c},#{data[c]}";
  160: ret = @negrect_pattern == nil || !(data[c] =~ @negrect_pattern ) ? func.call(data[c]) : negrect(data[c]){|d| func.call(d)} 
      unless ret # if ret is nil
        is_write = false
        next
      end
      data[c] = ret
    }
  endenter code here
启动工具后,会出现一条错误消息:

/root/.rbenv/versions/1.8.7-p375/lib/ruby/1.8/jcode.rb:153: warning: character class has `]' without escape
/root/.rbenv/versions/1.8.7-p375/lib/ruby/1.8/jcode.rb:153:in `delete!': premature end of regular expression: /[^]+/ (RegexpError)
from /ex-hyponymy-1.0/script/lib/del_mark.rb:173
from /ex-hyponymy-1.0/script/lib/del_mark.rb:165:in `each'
from /ex-hyponymy-1.0/script/lib/del_mark.rb:165
from /root/.rbenv/versions/1.8.7-p375/lib/ruby/1.8/jcode.rb:212:in `each_char'
from /root/.rbenv/versions/1.8.7-p375/lib/ruby/1.8/jcode.rb:211:in `scan'
from /root/.rbenv/versions/1.8.7-p375/lib/ruby/1.8/jcode.rb:211:in `each_char'
from /ex-hyponymy-1.0/script/lib/del_mark.rb:163
from /ex-hyponymy-1.0/script/lib/Cut.rb:160:in `call'
from /ex-hyponymy-1.0/script/lib/Cut.rb:160:in `exec'
from /ex-hyponymy-1.0/script/lib/Cut.rb:158:in `each'
from /ex-hyponymy-1.0/script/lib/Cut.rb:158:in `exec'
from /ex-hyponymy-1.0/script/lib/del_mark.rb:138
from /ex-hyponymy-1.0/script/lib/del_mark.rb:130:in `each'
from /ex-hyponymy-1.0/script/lib/del_mark.rb:130

我不明白这一点。我希望有人能帮助我。

不要将
/[^]+/
用作正则表达式:它无效

Ruby 1.8.x1正则表达式引擎将
[
视为字符类的开始,并认为
]
+
是字符类中的字符-被视为文字字符
]
的字符可以在
^
-否定之后不带转义符1

因此,character类没有关闭,并引发了一个“[正则表达式的]过早结束”错误

上面的警告提供了一个指示器:“警告:字符类有]'而没有转义”,表示由于上述原因,
]
没有关闭字符类

1这是“旧Ruby”规则。Ruby2+(甚至可能是1.9+?)有不同的正则表达式规则,并引发了一个“空字符类”错误,它不那么神奇,也不那么混乱。现在可能是更新使用的Ruby版本的好时机


可能不需要字符否定(
/[+^]/
/[\^]+/
)?或者可能字符类中有其他字符(
/[^f]+/
)?或者,它的意思是匹配任何单个字符,除了括号和加号(
/[^]+]/
;或者Ruby 2+中的
/[^\]+]/
?或者


这实际上取决于正则表达式的实际意图。。只需以有效格式编写即可。

不要将
/[^]+/
用作正则表达式:它无效

Ruby 1.8.x1正则表达式引擎将
[
视为字符类的开始,并认为
]
+
是字符类中的字符-被视为文字字符
]
的字符可以在
^
-否定之后不带转义符1

因此,character类没有关闭,并引发了一个“[正则表达式的]过早结束”错误

上面的警告提供了一个指示器:“警告:字符类有]'而没有转义”,表示由于上述原因,
]
没有关闭字符类

1这是“旧Ruby”规则。Ruby2+(甚至可能是1.9+?)有不同的正则表达式规则,并引发了一个“空字符类”错误,它不那么神奇,也不那么混乱。现在可能是更新使用的Ruby版本的好时机


可能不需要字符否定(
/[+^]/
/[\^]+/
)?或者可能字符类中有其他字符(
/[^f]+/
)?或者,它的意思是匹配任何单个字符,除了括号和加号(
/[^]+]/
;或者Ruby 2+中的
/[^\]+]/
?或者


这实际上取决于正则表达式的实际意图。。只需以有效的格式编写即可。

作为另一种可能性,在某些语言中,
/[^]/
是Ruby的
//m
的惯用用法(“无需匹配每个字符”=“匹配每个字符,甚至换行符”)。例如,JavaScript将接受它(即使有与Ruby的
//m
语义匹配的
//s
)。我认为它最终是
/[\^]+/
:OP似乎正在使用,它使用了自己的
\u regex\u quote
函数,在字符类之外引用regexps时,该函数可能工作得很好,但是在字符类中做的事情并不正确,比如在链接行中,引用要求完全不同。@user2864740谢谢你的解释,它确实帮助我理解这个问题。抱歉,我忘了添加jcode.rb和del_mark.rb源代码的正则表达式部分,现在我添加了它,看起来问题是从那里来的。@user2864740谢谢你的帮助,按照你的说明,我解决了问题,非常感谢。@Amadan谢谢你的帮助,按照你的说明,我解决了问题,非常感谢。另外一种可能性是,在某些语言中,
/[^]/
是Ruby的
//m
(“匹配每个字符,但不匹配”=“匹配每个字符,甚至换行符”)。例如,JavaScript将接受它(即使有与Ruby的
//m
语义匹配的
//s
)。我认为它最终是
/[\^]+/
:OP似乎正在使用,它使用了自己的
\u regex\u quote
函数,在字符类之外引用regexps时,该函数可能工作得很好,但是在字符类中做的事情并不正确,比如在链接行中,引用要求完全不同。@user2864740谢谢你的解释,它确实帮助我理解这个问题。抱歉,我忘了添加jcode.rb和del_mark.rb源代码的正则表达式部分,现在我添加了它,看起来问题是从那里来的。@user2864740谢谢你的帮助,按照你的说明,我解决了问题,非常感谢。@Amadan谢谢你的帮助,按照你的说明,我解决了问题,非常感谢。