【问题标题】:Match a string but capture only substring of it's match in ruby匹配一个字符串,但只捕获它在 ruby​​ 中匹配的子字符串
【发布时间】:2016-06-01 01:11:48
【问题描述】:

我正在为我的jekyll 站点扩展rouge shell 词法分析器,我想做以下事情。

  1. 匹配--word。捕获word,丢弃--
  2. 匹配<word>。捕获word,同时丢弃<>
  3. 匹配word=anyNumber.word。捕获wordanyNumber.word,丢弃=

首先我尝试了/(?=-+)\w/,没有匹配任何东西,然后我尝试反向并丢弃word,例如/-+(?=\w*)/,它成功了。我做错了什么?

【问题讨论】:

  • 添加一个小例子和想要的结果会很有帮助。如果这样做,请务必为每个输入值分配一个变量 (str = "..."),以便读者无需定义变量即可引用这些变量。

标签: ruby regex jekyll rouge


【解决方案1】:

我怀疑你想多了。您不需要在这里向前看或向后看。

str = "foo --word1 <word2> word3=anyNumber.word4"

p /--(\w+)/.match(str).captures
# => ["word1"]

p /<([^>]+)>/.match(str).captures
# => ["word2"]

p /(\w+)=([\w.]+)/.match(str).captures
# => ["word3", "anyNumber.word4"]

【讨论】:

    【解决方案2】:
    str = "--hopscotch <dodgeball> cat=9.lives"
    
    str[/(?<=\-\-)\w+/]
      #=> "hopscotch" 
    str[/(?<=\<)\w+(?=\>)/]
      #=> "dodgeball" 
    str.scan /(?:\w+(?=\=))|(?<=\=)\d+\.\w+/
      #=> ["cat", "9.lives"] 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-16
      • 1970-01-01
      • 2011-03-20
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多