Tag: regex

如何使用TCPServer序列化对象?

为了加快我的链中特定脚本的频繁重复运行,我开始序列化到磁盘自定义对象,否则需要花费太多时间来创建聚合。 使用内置的Yaml和/或Marshal。 Yaml序列化为看似健康的文本文件,但在尝试反序列化时会产生以下错误: b2 = YAML::load(File.open(“browserObj.yaml”, ‘r’)) Syck::TypeError: Invalid Regular expression: “/\\A\\s*\n ([a-zA-Z][-+.a-zA-Z\\d]*): …and many more strange lines 但是,即使尝试通过Marshal错误保存到二进制文件: puts File.open(“browserObj.bin”, ‘w’).write Marshal::dump($browser) TypeError: can’t dump TCPServer # Marshal::dump($browser, File.open(“browserObj.bin”, ‘wb’)) # same error 故意不在最后做$browser.close我可以选择在我的Ruby脚本生命周期之后保持这个TCPServer活着并运行。 有什么想法我怎么能逃脱这个? 我保证成功重新加载以仔细检查任何套接字/内部对象的有效性,并且如果必须的话,只需重新初始化一个全新的对象。

rails在保存之前删除非数字值

我已经搜索了,看起来这应该很简单,但我无法让它工作。 我想在保存电话号码之前删除所有非数字字符。 这就是我目前所拥有的: before_save { |workorder| workorder.phonenumber = phonenumber.to_s.gsub(/\D/, ”).to_i } 因此,如果用户输入 925-555-5555 它应该保存9255555555,但它实际上只保存了925并且忽略了之后的所有内容 我也尝试过: before_save { |workorder| workorder.phonenumber = phonenumber.to_s.gsub(/[^0-9]/, “”).to_i } 结果相同。 解决了: def raw_phonenumber self.phonenumber end def raw_phonenumber=(s) self.phonenumber=s.gsub(/\D/, ”) end

使用Gsub逃避撇号

我在Ruby工作,我试图将’字符转义为\’以便我可以在SQL中使用它们。 我正在尝试使用gsub ,但它似乎没有用。 “this doesn’t work”.gsub /’/, ‘\\” #=> “this doesnt workt work” “this doesn’t work”.gsub /’/, ‘\\\” #=> “this doesnt workt work” “this doesn’t work”.gsub /’/, ‘\\\\” #=> “this doesn\\’t work” “this doesn’t work”.gsub /’/, ‘\\\\\” #=> “this doesn\\’t work” 我不知道gsub是否是正确使用的方法,所以我愿意尝试几乎任何可以获得我正在寻找的结果的东西。

什么是触发器操作符?

我最近听说过有关Perl和Ruby中带有正则表达式的触发器,但是我无法找到它们是如何工作的以及常见的用例。 任何人都可以用语言无关的方式解释这个吗? 现在我明白了它是什么,以及它是如何工作的,我想简单地说一下这个问题:什么是触发器操作符?

如何有力地解析格式错误的CSV?

我正在处理政府来源(FEC,州选民数据库等)的数据。 它的格式不一致,这会以各种令人愉快的方式破坏我的CSV解析器。 它是外部采购和权威的。 我必须解析它,我不能重新输入,在输入时validation等。 就是这样; 我不控制输入。 属性: 字段包含格式错误的UTF-8(例如Foo \xAB bar ) 一行的第一个字段指定已知集合中的记录类型。 知道记录类型,您知道有多少字段及其各自的数据类型,但直到您知道。 文件中的任何给定行可能使用带引号的字符串( “foo”,123,”bar” )或不带引号( foo,123,bar )。 我还没有遇到任何在给定行中混合的地方(即”foo”,123,bar ),但它可能在那里。 字符串可以包括内部换行符,引号和/或逗号字符。 字符串可以包括逗号分隔的数字。 数据文件可能非常大(数百万行),因此需要仍然相当快。 我正在使用Ruby FasterCSV(在1.9中仅称为CSV),但这个问题应该与语言无关。 我的猜测是,解决方案需要使用明确的记录分隔符/引号字符(例如ASCII RS,STX)进行预处理替换。 我已经在这里开始了一点但它并不适用于我得到的一切。 如何可靠地处理这种脏数据? ETA:以下是单个文件中可能包含的简化示例: “此”, “是”,123, “一”, “正常”, “线” “行”,“带”“内部”,“引用” “短线”,“有 一个 “内部引用”,1个逗号和 换行符” un“quot”ed,text,with,1,2,3,numbers “引用”, “号码”, “系列”, “1,2,3” “无效\ xAB utf-8”

如何在SQLite3和Rails 3.1中打开REGEXP?

我使用SQLite3数据库在Rails 3中有以下语句: word = ‘Hello’ word_entry = Word.where(“name REGEXP :word”, {:word => “[[::]]”}) 但是,在SQLite3下运行时,我不断得到: SQLite3 :: SQLException:没有这样的函数:REGEXP 我在SQLite3文档中读到它确实支持REGEXP函数。 在我的gemfile中,我有这条线 gem ‘sqlite3’ 我的数据库配置文件如下所示: development: adapter: sqlite3 database: db/development.sqlite3 pool: 5 timeout: 5000 有什么想法正在发生什么? 解决方案:我最终找到了这个解决方案 。 不幸的是,它不适用于Rails 3.因此,为了使用正则表达式,我最终切换到MYSQL而不是SQLite3。

如何从字符串中删除表情符号

我的问题是从字符串中删除表情符号,而不是使用正则表达式从字符串中删除CJK(中文,日文,韩文)字符。 我试着用这个正则表达式: REGEX = /[^\u1F600-\u1F6FF\s]/i 这个正则表达式工作正常,除了它还检测我需要这些字符的中文,日文和韩文字符。 知道如何解决这个问题吗?

使用像perl这样的递归正则表达式匹配Ruby中的平衡括号

我一直在寻找一种方法来匹配正则表达式中的平衡括号,并在Perl中找到了一种使用递归正则表达式的方法: my $re; $re = qr{ \( (?: (?> [^()]+ ) # Non-parens without backtracking | (??{ $re }) # Group with matching parens )* \) }x; 来自perl正则表达式网站 。 有没有办法在Ruby或类似语言中执行此操作? 更新 : 对于那些感兴趣的人有一些有趣的链接: Oniguruma手册 – 来自Sawa的回答。 实用程序员的Ruby 1.9正则表达式示例章节

与primefaces分组混淆 – 它与Ruby的正则表达式中的分组有何不同?

我刚刚浏览了Atomic Grouping和rubyinfo的文档,我想到了一些简单的问题,如下所示: 为什么这个名字是“Atomic grouping” ? 一般分组没有什么“primefaces性” 。 primefaces分组与一般分组有何不同? 为什么primefaces组被称为非捕获组? 我尝试了下面的代码来理解,但是对输出的混淆以及它们在同一个字符串上的工作方式有多么不同? irb(main):001:0> /a(?>bc|b)c/ =~ “abbcdabcc” => 5 irb(main):004:0> $~ => # irb(main):005:0> /a(bc|b)c/ =~ “abcdabcc” => 0 irb(main):006:0> $~ => #

Ruby中奇怪的反斜杠替换

我不明白这个Ruby代码: >> puts ‘\\ <- single backslash' # \ > puts ‘\\ <- 2x a, because 2 backslashes get replaced'.sub(/\\/, 'aa') # aa <- 2x a, because two backslashes get replaced 到目前为止,一切如预期。 但是如果我们用/\\/搜索1,并用’\\\\’编码的2替换,为什么我们得到这个: >> puts ‘\\ <- only 1 … replace 1 with 2'.sub(/\\/, '\\\\') # \ <- only 1 backslash, even though we replace […]