Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何解析远程网站并为字典工具提示在每个单词上创建链接?_Ruby On Rails_Ruby_Regex_Parsing_Tooltip - Fatal编程技术网

Ruby on rails 如何解析远程网站并为字典工具提示在每个单词上创建链接?

Ruby on rails 如何解析远程网站并为字典工具提示在每个单词上创建链接?,ruby-on-rails,ruby,regex,parsing,tooltip,Ruby On Rails,Ruby,Regex,Parsing,Tooltip,我想解析一个随机网站,修改内容,使每个单词都是一个链接(对于字典工具提示),然后在iframe中显示该网站 我不是在寻找一个完整的解决方案,而是一个提示或一个可能的策略。链接是我的问题,解析网站并在iframe中显示它非常简单。所以基本上我有一个包含所有html内容的字符串。我甚至不确定是在服务器端还是在页面加载了JS之后进行 我正在使用RubyonRails、jQuery和jRails 注意:href标记的内容取决于单词 澄清: 我尝试了一个regexp,它已经可以工作了: @site.gsu

我想解析一个随机网站,修改内容,使每个单词都是一个链接(对于字典工具提示),然后在iframe中显示该网站

我不是在寻找一个完整的解决方案,而是一个提示或一个可能的策略。链接是我的问题,解析网站并在iframe中显示它非常简单。所以基本上我有一个包含所有html内容的字符串。我甚至不确定是在服务器端还是在页面加载了JS之后进行

我正在使用RubyonRails、jQuery和jRails

注意:href标记的内容取决于单词

澄清: 我尝试了一个regexp,它已经可以工作了:

@site.gsub!(/[A-Za-z]+(?:['-][A-Za-z]+)?|\\d+(?:[,.]\\d+)?/) {|word| '<a href="">' + word + '</a>'}
@site.gsub!(/[A-Za-z]+(?:['-][A-Za-z]+)?|\\d+(?:[,.]\\d+)/){word |''
但问题是只替换文本中的单词,而保留HTML的原样。所以我想这是一个正则表达式问题


谢谢你的建议。

听起来你已经计划好了

将内容拆分为单词,然后为每个单词创建链接,如

编辑(根据您的评论):
啊。。。我建议你四处搜索屏幕抓取技术。他们中的大多数人都应该从删除字符之间的任何内容开始,并用换行符替换
和。

我认为regexp对此不起作用,或者至少,它总是很脆弱的。更好的方法是使用or解析页面,然后遍历它并修改纯文本节点

简单。散列HTML,运行正则表达式,然后取消散列HTML

<?php
class ht
{
    static $hashes = array();

    # hashes everything that matches $pattern and saves matches for later unhashing
    function hash($text, $pattern) { 
        return preg_replace_callback($pattern, array(self,'push'), $text);
    }

    # hashes all html tags and saves them
    function hash_html($html) {
        return self::hash($html, '`<[^>]+>`');
    }

    # hashes and saves $value, returns key
    function push($value) {
        if(is_array($value)) $value = $value[0];
        static $i = 0;
        $key = "\x05".++$i."\x06";
        self::$hashes[$key] = $value;
        return $key;
    }

    # unhashes all saved values found in $text
    function unhash($text) {
        return str_replace(array_keys(self::$hashes), self::$hashes, $text);
    }

    function get($key) {
        return self::$hashes[$key];
    }

    function clear() {
        self::$hashes = array();
    }
}
?>

哦。。。对,我是用PHP写的。我猜您必须将其转换为ruby或js,但想法是一样的。

在使用正则表达式之前,我会使用Nokogiri删除HTML结构

no_html = Nokogiri::HTML(html_as_string).text

谢谢,但这有点难。我试过这个@site.gsub!(/[A-Za-z]+(?:['-][A-Za-z]+)?| \\d+(?:[,.]\\d+)/{word |''''}但是我需要一种方法来只替换文本中的单词,而不是html标记。有什么想法吗?你的正则表达式有点难读,但是你也可以匹配>之间的所有文本,这会把表单的脚本弄得一团糟。。。不,事实上不会。您只需要修改散列模式来散列脚本标记中的所有内容,这样代码就不会被解析。事实上,这正是我写这门课的原因。
no_html = Nokogiri::HTML(html_as_string).text