数字内容表的正则表达式

时间:2012-10-30 12:38:33

标签: ruby-on-rails ruby regex

我有这样的模板:

<h1>asd</h1>
...
<h1>asd</h1>
...
    <h2>asd</h2>
    ...
    <h2>asd</h2>
    ...

如何将其转换为

<h1>1. asd</h1>
...
<h1>2. asd</h1>
...
    <h2>2.1. asd</h2>
    ...
    <h2>2.2. asd</h2>
    ...

在ruby 1.8.7中使用正则表达式?

1 个答案:

答案 0 :(得分:1)

使用oniguruma,可以在Ruby 1.8.7上安装,

string =<<X
<h1>asd</h1>
...
<h1>asd</h1>
...
    <h2>asd</h2>
    ...
    <h2>asd</h2>
    ...
X

puts string.gsub(/(?<=<h1>).*?(?=<h1>|\z)/m).with_index{|s, i|
  s = s.gsub(/(?<=<h2>).*?(?=<h2>|\z)/m).with_index{|s, j|
    "#{i+1}.#{j+1}. #{s}"
  }
  "#{i+1}. #{s}"
}

#=>
# <h1>1. asd</h1>
# ...
# <h1>2. asd</h1>
# ...
#     <h2>2.1. asd</h2>
#     ...
#     <h2>2.2. asd</h2>
#     ...