我刚刚开始使用ANTLR(使用Java),我需要一些解析.erb文件的帮助。 假设我有这个代码:
<html>
<body>
<div class ='title'> <h1>BLABLA</h1></div>
<div class = 'log'>
<%= form_tag('/home/login', :method => 'get') do %>
<tr>
<td><%= label_tag(:nick, 'Nickname:') %>
<%= text_field_tag(:nick) %>
</td>
<td><%= label_tag(:password, 'Password:') %>
<%= password_field_tag(:password) %>
</td>
</tr>
<%= submit_tag('Login') %>
<% end %>
</div>
</body>
</html>
提取被调用函数名称的最简单方法是什么?我需要一个这样的列表:[“form_tag”,“label_tag”,“text_field_tag”,“password_field_tag”,“submit_tag”]
我真的不需要其他任何东西,所以采用HTML语法并适应ANTRL Github似乎有点矫枉过正。
感谢您阅读/帮助。
答案 0 :(得分:1)
code.scan(/(?<=<%=).*?(?=%>)/)
.map { |s| s[/(?<=\A=|\A).*?(?=\()/].to_s.strip }
.reject(&:empty?) # remove possible false positives
#⇒ [
# [0] "form_tag",
# [1] "label_tag",
# [2] "text_field_tag",
# [3] "label_tag",
# [4] "password_field_tag",
# [5] "submit_tag"
# ]
这里有两个正则表达式:
(?<=<%=).*?(?=%>)
只使用正lookarounds(前瞻和后瞻)。(?<=\A=|\A).*?(?=\()
大致相同,但它看起来在字符串的开头(可能后跟一个等号)和左括号之间。