【问题标题】:Ruby Regexp: How to match parts of string separated some wordRuby Regexp:如何匹配分隔某些单词的字符串部分
【发布时间】:2015-08-27 22:29:07
【问题描述】:

我有这样一个字符串:

<span>test text 1</span> some text <span>test text 2<span>test text 3</span></span>

我想检索第二种情况(在“一些文本”之后,带有嵌套跨度),即 <span>test text 2<span>test text 3</span></span> 并匹配顶级跨度的文本和内部跨度中的文本:test text 2test text 3(但不是 @ 987654327@)

我的正则表达式:<span.*?>(.*?)<span.*?>(.*?)<\/span><\/span>

但我明白了:

我应该如何修复正则表达式以获取 test text 2test text 3 匹配组并忽略第一个跨度(不嵌套)?

【问题讨论】:

  • 如果这是 HTML,你不能在 Ruby 中使用 HTML 解析器吗?
  • @stribizhev 嗯..好问题!但我相信正则表达式有一个简单的解决方案)
  • 是的,它可以用正则表达式完成,但它看起来很难看,而且答案很可能被否决。

标签: ruby regex


【解决方案1】:

我找到了解决办法!

(?!<span.*<\/span>.*<span)<span.*?>(.*?)<span.*?>(.*?)<\/span><\/span>

效果很好

【讨论】:

    【解决方案2】:

    应该这样做:

    s = "<span>test text 1</span> some text <span>test text 2<span>test text 3</span></span>"
    matches = s.scan(/<span.*?>.*?<\/span.*?>/)
    p matches[1] # "<span>test text 2<span>test text 3</span>"
    

    【讨论】:

      猜你喜欢
      • 2013-06-04
      • 2013-10-28
      • 2013-05-20
      • 2012-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多