£被视为无效字符

时间:2014-10-24 12:41:02

标签: ruby regex unicode gsub

我需要在我的文字中搜索“£”符号,但它不断出现错误:

invalid character property name {`£`}: /\p{`\u00A3`}/ (SyntaxError)

我在顶部有#encoding:utf-8,我正在使用它的上下文是:

 original_contents << line.gsub(/[abc]/, '*')
 .gsub(/\p{£}/, '')

当我尝试.gsub(/£/, '')时,我会

C:/Users...Epub run through.rb:12:in `gsub': incompatible encoding regexp match (UTF-8 regexp with CP850 string) (Encoding::CompatibilityError)
  from C:/Users...Epub run through.rb:12:in `block in <top (required)>'
  from C:/Users...Epub run through.rb:9:in `each_line'
  from C:/Users...Epub run through.rb:9:in `<top (required)>' 
  from -e:1:in `load'
  from -e:1:in `<main>'

1 个答案:

答案 0 :(得分:1)

在正则表达式中,\p用于匹配&#34;字符属性&#34;这基本上是一组以某种方式相关的字符(例如数字字符,ASCII字符等)。文档列出了字符属性here。根据该列表(以及您的错误消息),您的代码中的字符属性无效。

您应该使用/£/。您在 案例中遇到的错误是因为您的字符串不是UTF-8编码的。 Regexp默认使用源编码(UTF-8)并且应该匹配字符串的编码。解决此问题的最简单方法是更改​​字符串的编码。

original_contents.encode! Encoding::UTF_8
original_contents.gsub(/£/, '')