2016-05-10 5 views
2
私は スーパー基本テンプレート言語を開発しよう、と私は正規表現に問題がある

は、私はこれを変換しよう:正規表現は、チェーンの交換問題

# Tilte 
## Subtitle 
### Subsubtitle 
Lorem ipsum b(dolor) sit i(amet), consectetur u(adipisicing) elit 

これに:

<h1>Title</h1> 
<h2>Subtilte</h2> 
<h3>Subsubtitle</h3> 
Lorem ipsum <strong>dolor</strong> sit <i>amet</i>, consectetur <u>adipisicing</u> elit 

しかし、私はこれを得る:

<h1></h1> 
<h2>TEma 4</h2> 
<h3>Subtitle</h3> 
Lorem ipsum <strong>Subsubtitle</strong> sit i(amet), consectetur u(adipisicing) elit 

ここに私のコードです:

input = ARGV[0] 

regExes = { 

    h1: [/^# (.*)$/, "<h1>", "</h1>"], 
    h2: [/^## (.*)$/, "<h2>", "</h2>"], 
    h3: [/^### (.*)$/, "<h3>", "</h3>"], 
    b: [/b\((.*)\)/, "<strong>", "</strong>"], 

} 

strFile = File.read input 

puts "\t", strFile 

for index, regEx in regExes 

    actualNode = regExes[index] 
    print actualNode, "\n" 
    strFile.gsub! actualNode[0], "#{actualNode[1]}#{$1}#{actualNode[2]}" 

end 

puts strFile 

どうすればよいですか?

+0

使用怠惰なマッチングを参照してください: '/ B \(。?(*)\)/' –

+0

は[OK]を、一つのことが解決されるが、私はまだ** H基タグに問題があります* * –

+0

**問題は、設定された値にあります** –

答えて

2

太字タグや単語の境界\b前で

regExes = { 

    h3: [/^### (.*)$/, "<h3>", "</h3>"], 
    h2: [/^## (.*)$/, "<h2>", "</h2>"], 
    h1: [/^# (.*)$/, "<h1>", "</h1>"], 
    b: [/\bb\((.*?)\)/, "<strong>", "</strong>"], 
    i: [/\bi\((.*?)\)/, "<i>", "</i>"], 
    u: [/\bu\((.*?)\)/, "<u>", "</u>"], 
} 

、その後、非破壊gsub使用します:

をそれらの各我々は単語の一部と一致していないことを確認する)の
input = input.gsub(actualNode[0], "#{actualNode[1]}\\1#{actualNode[2]}") 

このIDEONE demo

1

代わりgsub!行のこれを試して...

あなたは下線と、この順番で正規表現を定義し(そして強いと怠惰なマッチングを気にする必要が
strfile = actualNode[1]+actualNode[0].match(strfile)[1]+actualNode[2] if actualNode[0].match(strfile) 
+1

TT、 私は最初の 'h1'を取得します –

+0

あなたは' + actualNode [2] 'を書いた部分を含んでいますか?あなたは全体の行を見るためにスクロールしましたか? – SteveTurczyn

+0

私はこれをirbでテストしました。 – SteveTurczyn