【发布时间】:2015-12-29 09:11:19
【问题描述】:
我很难将 POSIX 正则表达式移植到 Lua 字符串模式。
我正在处理我想从中过滤复选框的 html 响应
被检查。特别是我对value 和name 的字段感兴趣
每个选中的复选框:
以下是我感兴趣的复选框示例:
<input class="rid-2 form-checkbox" id="edit-2-access-comments" name="2[access comments]" value="access comments" checked="checked" type="checkbox">
<input class="rid-3 form-checkbox real-checkbox" id="edit-3-administer-comments" name="3[administer comments]" value="administer comments" checked="checked" type="checkbox">
相反,我对此不感兴趣(未选中复选框):
<input class="rid-2 form-checkbox" id="edit-2-access-printer-friendly-version" name="2[access printer-friendly version]" value="access printer-friendly version" type="checkbox">
使用 POSIX 正则表达式,我在 Python 中使用了以下模式:pattern=r'name="(.*)" value="(.*)" checked="checked"',它就可以正常工作。
我在 Lua 中的第一个方法是简单地使用这个:pattern ='name="(.-)"
value="(.-)" checked="checked"' 但它给出了奇怪的结果(第一次捕获
正如预期的那样,但第二个返回了很多不需要的 html)。
我也尝试过以下模式:
pattern = 'name="(%d?%[.-%])" value="(.-)"%s?(c?).-="?c.-"%s?type="checkbox"'
这一次,value 的第二次捕获内容被返回,但所有
匹配的复选框(不仅是带有checked="checked" 字段的复选框)
为了完整起见,这里是 Lua 代码(来自我的 Nmap NSE 脚本的 sn-p) 尝试进行这种模式匹配:
pattern = 'name="(.-)" value="(.-)" checked="checked"'
data = {}
for name, value in string.gmatch(res.body, pattern) do
stdnse.debug(1, string.format("%s %s", name, value))
end
【问题讨论】:
-
pattern = 'name="([^"]*)" value="([^"]*)" checked="checked"' -
感谢 Egor,它现在可以完美运行了。
标签: lua lua-patterns