反向正则表达式查找特定字符串

时间:2011-01-04 04:54:58

标签: ruby regex

"very \n simple example of big"
 => return true because first occurrence moving backwards from example is \n


"very \n\t\t simple example of big" 
 => return false because first occurrence moving backwards from example is \n\t\t

这可以通过反向正则表达式查找吗?

4 个答案:

答案 0 :(得分:2)

我不确定你到底在寻找什么,但你总是可以扭转字符串并向前匹配:

>> "very \n simple example of big".reverse.match(/elpmaxe[^\t]+\n/)
=> #<MatchData "elpmaxe elpmis \n">

>> "very \n\t\t simple example of big".reverse.match(/elpmaxe[^\t]+\n/)
=> nil

我不确定这是否已经超越了聪明和愚蠢之间的界限,但它适用于你的例子。

答案 1 :(得分:1)

我仍然不完全确定你在寻找什么,但如果它是“找出”示例“一词是否出现在不以任何标签开头的行上,”然后你走了:

ruby-1.9.2-p136 :001 > samples = [ "very \n simple example of big", "very \n\t\t simple example of big" ]
 => ["very \n simple example of big", "very \n\t\t simple example of big"] 
ruby-1.9.2-p136 :002 > samples.map{ |s| s[/^[^\t\n]+.+?example/] }
 => [" simple example", nil] 

答案 2 :(得分:1)

我不喜欢Ruby,因此给出了我在Javascript中验证的正则表达式:

/\n[^(\t+)]+ example/g

答案 3 :(得分:1)

问题不太明确,但我认为这是你想要的,使用negative lookahead

^(?!\t\t).*example

示例:http://rubular.com/r/DRdlscH6cO

这里我使用^作为行的开头(如果您愿意,可以使用\n,但它与第一​​行不匹配)。默认情况下,.与其他行不匹配,所以它也是安全的 您可能还想添加捕获组,并且只匹配整个单词:

^(?!\t\t)(.*)\bexample\b

正则表达式不允许包含example的行,并以\t\t开头。该行可以从单个\t开头,也可以在其他地方有\t\t