0

次の文字列を指定します。

bc.  some text
 more text
 even more

^ above here is the empty line

私はそれが欲しい:

<pre>
some text
more text
even more
</pre>

^ above here is the empty line

「最初の空行までbc.を正規表現するにはどうすればよいですか?

これまでのところ、私はこれを得ました:

# note that for some reason a direct .gsub! behaves
# differently/fails when using the block, so I use .gsub
textile_markup = textile_markup.gsub(/^bc.  .*^$/m) { |s| "<pre>#{s[5..(s.length)]}</pre>" }

当然のことながら、これは最初の行ではなく、最後の空行まで greedy に一致します。 ^$ の部分を非貪欲にするにはどうすればよいですか?

4

2 に答える 2

2
str = 
"bc.  some text
more text
even more

^ above here is the empty line

bc.  some text
more text
even more

^ above here is the empty line"

puts str.gsub(/^bc\.  (.*?)\n\n/m, "<pre>\n\\1\n</pre>\n\n")

出力:

<pre>
some text
more text
even more
</pre>

^ above here is the empty line

<pre>
some text
more text
even more
</pre>

^ above here is the empty line

説明

?.*?スターオペレーターを欲張りにしない

/m最後に修飾子を使用すると、ドットが改行に一致します

于 2013-03-20T03:28:29.353 に答える
1

一度に実行できますが、いくつかの準備が必要です。

txt = <<DOC
bc.  some text
 more text
 even more

bc.  some text
 more text
 even more

DOC

TRANSFORMS = {"bc.  " => "<pre>\n",       # The 'bc.  should become <pre> followed by a line-end
              /^ /    => "",              # leading space should be eliminated
             "\n\n"   => "\n<\/pre>\n\n"} # empty line should be preceded by a closing pre-tag

re = Regexp.union(TRANSFORMS.keys)
puts txt.gsub(re, TRANSFORMS)

出力:

<pre>
some text
more text
even more
</pre>

<pre>
some text
more text
even more
</pre>
于 2013-03-19T22:09:05.450 に答える