提取包含单词的字符序列

时间:2017-09-05 16:44:59

标签: html ruby-on-rails ruby regex

我有一个包含特殊字符序列的HTML字符串,如下所示:

[start_tag attr="value"][/end_tag]

我希望能够提取其中一个包含特定属性的序列,例如:

[my_image_tag image_id="12345" attr2="..." ...]

从上面的例子中,我想用方括号提取整个事物,但在这种情况下只使用其中一个属性及其值 - image_id="12345"

我尝试使用正则表达式,但它给了我整行,而我只需要基于特定值的部分行,如上所述。

1 个答案:

答案 0 :(得分:1)

这样的事情应该有效:

my_string = '<h1>Heading1</h1>some text soem tex some text [some_tag attrs][/some_tag]some text some text [some_tag image_id="12345"] some text'

search_attrs = %w(image_id foo bar)

found = my_string =~ /(\[[^\]]*(#{search_attrs.join('|')})="[^"\]]*"[^\]]*\])/ && $1
# => "[some_tag image_id=\"12345\"]"

对于特定的属性id和值,您可以像这样简化它:

found = my_string =~ /(\[[^\]]* image_id="12345"[^\]]*\])/ && $1
# => "[some_tag image_id=\"12345\"]"

它的工作原理是将主要捕获组扩展到您要查找的所有内容。

但是,这假设您只需要提取一个这样的属性。

它还假设您不关心字符串是否穿过任何HTML标记边界。如果您关心这一点,那么您需要先使用HTML解析器挖出法律边界,然后在这些结果中进行搜索。