Tag: regex

在Ruby中将Unicode Number转换为Integer

不幸的是,我有一些数字作为字符串使用非ASCII数字。 我需要将它们转换为常规的Ruby数字来对它们进行一些数学运算。 因此,例如,如果数字作为字符串“19”进来,这是19但是作为字符“扩展阿拉伯语数字一”然后是“扩展阿拉伯语数字九”,我需要一种方法将其转换为Ruby整数Fixnum 19。 问题是, 根据这个 ,有55组这些扩展数字的0-9,即我需要处理550个总代码点。 我已经知道,对于给定的组,连续数字的代码点是连续的,因此例如扩展的阿拉伯语数字0是U + 06F0,扩展的阿拉伯语数字9是U + 06F9,所以我可以测试每个数字以查看哪个范围它在然后从我正在查看的字符的代码点中减去零代码点作为整数,给我常规的Ruby整数。 例如,6F9 – 6F0 = 9(粗略地说,一旦它们被转换为整数代码点)。 但要做到这一点,我需要为这55个范围创建一个巨大的查找哈希,这就是很多打字。 我想我可以将上面链接中的HTML表格翻译成ruby地图,但这感觉很糟糕。 我已经知道了 “۱۹” =~ /[[:digit:]]+/ 将是匹配,但问题是“如何将这些Unicode数字转换回常规的Ruby整数?” 一定有更好的方法! 有任何想法吗? 谢谢!

为什么一些正则表达式引擎在单个输入字符串中匹配。*两次?

许多正则表达式引擎在单行字符串中匹配.* 两次 ,例如,在执行基于正则表达式的字符串替换时: 根据定义,第一个匹配是整个(单行)字符串,如预期的那样。 在许多引擎中有第二个匹配,即空字符串 ; 也就是说,即使第一个匹配消耗了整个输入字符串, .* 再次匹配,然后匹配输入字符串末尾的空字符串。 注意:要确保只找到一个匹配项,请使用^.* 我的问题是: 这种行为有充分的理由吗? 一旦输入字符串被完全消耗,我就不会期望再次尝试找到匹配项。 除了试验和错误之外,您是否可以从文档/正则表达式方言/标准中收集哪些引擎表现出这种行为? 更新 : revo的有用答案解释了当前行为的方式; 至于潜在的原因 ,请参阅此相关问题 。 表现出行为的语言/平台: # .NET, via PowerShell (behavior also applies to the -replace operator) PS> [regex]::Replace(‘a’, ‘.*’, ‘[$&]’ [a][] # !! Note the *2* matches, first the whole string, then the empty string # Node.js $ node […]

Ruby链接为字符串中的url

有一些关于使用正则表达式链接文本的post。 最受欢迎的是这篇文章 。 不过我的规格有点棘手: describe TextFormatter do def l(input) TextFormatter.gsub_links!(input){|link| “!!#{link}!!”} end it “should detect simple links” do l(“http://www.cnn.com”).should == “!!http://www.cnn.com!!” end it “should detect multi links” do l(“http://www.cnn.com http://boats.com?help.asp”).should == “!!http://www.cnn.com!! !!http://boats.com?help.asp!!” end it “should compensate for parans properly” do l(“(http://this.is?hello_world)”).should == “(!!http://this.is?hello_world!!)” end it “should ignore existing links” do s = ” http://sam.com […]

如何使用ruby gsub Regexp与许多匹配?

我的csv文件内容在引用文本中有双引号 test,first,line,”you are a “kind” man”,thanks again,second,li,”my “boss” is you”,good 我需要用“”替换逗号前面或后面的每个双引号。 test,first,line,”you are a “”kind”” man”,thanks again,second,li,”my “”boss”” is you”,good 所以“被”替换为“” 我试过了 x.gsub(/([^,])”([^,])/, “#{$1}\”\”#{$2}”) 但没有奏效

子域约束并排除某些子域

在我的routes.rb文件中,我想在routes.rb中使用子域约束function,但是我想从catch all路由中排除某些域。 我不想在特定的子域中拥有某个控制器。 这样做的最佳做法是什么。 # this subdomain i dont want all of the catch all routes constraints :subdomain => “signup” do resources :users end # here I want to catch all but exclude the “signup” subdomain constraints :subdomain => /.+/ do resources :cars resources :stations end

当我使用分组时,如何使用gsub对Ruby正则表达式(regex)进行反向引用?

我想修补从网页中提取的一些文本数据。 样品: t=”First sentence. Second sentence.Third sentence.” 在第二句末尾的点之后没有空格。 这标志着第3个句子在原始文档中的单独行(在br标记之后)。 我想使用这个正则表达式将“\ n”字符插入适当的位置并修补我的文本。 我的正则表达式: t2=t.gsub(/([.\!?])([A-Z1-9])/,$1+”\n”+$2) 但不幸的是它不起作用:“NoMethodError:未定义的方法`+’为nil:NilClass”如何正确地反向引用匹配的组? 在Microsoft Word中这么简单,我只需要使用\ 1和\ 2符号。

如何使用ruby 1.9匹配unicode单词?

我正在使用ruby 1.9并试图找出我需要使用哪个正则表达式: Encoding.default_internal = Encoding.default_external = ‘utf-8’ “föö”.match(/(\w+)/u)[1] == “föö” # => false

Ruby正则表达式\ 1对gsub意味着什么

\ 1做什么? 例如 “foo bar bag”.gsub(/(bar)/,’car\1′) 我相信它与你如何使用括号有关,但我不太确定。 有人可以向我解释一下吗? 你可以做像\ 2这样的东西吗? 如果是这样,会怎么做?

使用Look-behind正则表达式(Ruby)的问题

我编写了这个正则表达式来匹配HTML页面中的所有href和src链接; (我知道我应该使用解析器;这只是试验): /((href|src)\=\”).*?\”/ 没有后视 它工作正常,但当我尝试将表达式的第一部分修改为后视模式时: /(?<=(href|src)\=\").*?\"/ look-behind 它会抛出错误,指出“无效的后视模式”。 任何想法,看起来有什么问题?

只有在逗号之前添加空格?

有没有办法在字符串中的逗号之后添加空格,只有它不存在。 例: word word,word,word, 最终会成为 word word, word, word, ruby或rails中是否有函数可以执行此操作? 这将用于数十万个句子,因此它需要很快(性能很重要)。