2010-12-03 21 views
1

D'abord, avant de dire quoi que ce soit, je dois le faire parce que le RSS est mal formé, mais je ne peux pas le corriger de mon côté. Donc, alors que j'ai essayé d'utiliser un RSS et un analyseur XML, ils échouent et je n'ai qu'un accès frontal. Cependant, je suis super proche, mais je ne peux pas comprendre pourquoi cela ne correspond pas.Avec regex, comment puis-je faire correspondre plusieurs fois un tag XML?

L'alimentation (c'est un à long chaîne 1 ligne): http://pastebin.com/5dJhXCvf

Premier exemple:

<title>(.+)</title> 

Ce que je pensais fonctionnait très bien avec mon test juste:

<title>&quot;cterrorism task force&quot; location:oregon - Google News</title> 

Mais le problème est qu'il correspond à tout alors comme un match, par exemple:

<title>&quot;cterrorism task force&quot; location:oregon - Google News</title><title>&quot;cterrorism task force&quot; location:oregon - Google News</title> 

Equals article 1 résultat dans mon tableau de exec() et match()

Alors j'ai essayé:

<title>([\w\d\s\=\%\_\`\~\+\!\@\#\$\%\^\&\*\(\)\:\'\"\[\]\{\}\|\,\.\/]+)</title> 

Mais qui ne renvoie rien ... Des idées?

+0

Ce qui est malformé à propos de l'alimentation? –

+0

Si vous copiez et collez cela dans le validateur W3C, il échoue. Et jQuery ne tentera même pas de l'analyser non plus. J'ai également essayé jFeed mais cela n'a pas fonctionné non plus. Cependant, si je l'appelle avec un texte en-tête, il renvoie bien. J'ai juste besoin du titre et des liens, donc je me suis dit que je pourrais juste analyser le texte, puis utiliser regex. –

+0

Il manque quelques caractères à votre classe de personnage, ce qui était plutôt inévitable avec un monstre comme ça. Si vous voulez une classe de caractères qui ne corresponde à rien sauf les chevrons, utilisez ceci: '[^ <>]' –

Répondre

6

Essayez la version non gourmande <title>(.+?)<\/title>. Here vous pouvez tester ces choses en ligne.

+0

'/ (. +?) <\/title>/g' est génial, mais il ne renvoie que 2 résultats. Savez-vous pourquoi ce serait? Je crois qu'il devrait y avoir comme 9 ... – <span class="text-secondary"> <small> <span></span> </small> </span> </p> </div> </div> </div> <div itemprop="comment" class="post-comment"> <div class="row"> <div class="col-lg-1"><span class="text-secondary">+0</span></div> <div class="col-lg-11"> <p class="commenttext">Pas sûr. Y a-t-il de nouvelles lignes dans votre texte? – <span class="text-secondary"> <small> <a rel="noopener" target="_blank" href="https://stackoverflow.com/users/362938/">detunized</a></span> <span></span> </small> </span> </p> </div> </div> </div> <div itemprop="comment" class="post-comment"> <div class="row"> <div class="col-lg-1"><span class="text-secondary">+0</span></div> <div class="col-lg-11"> <p class="commenttext">Ne devrait pas être ... mais il pourrait y avoir – <span class="text-secondary"> <small> <span></span> </small> </span> </p> </div> </div> </div> </div> </div> </article> <div> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-6208739752673518" data-ad-slot="1038284119" data-ad-format="auto" data-full-width-responsive="true"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> <article class="board-top-1 padding-top-10"> <div class="post-col vote-info"> <span class="count">0<i class="fa fa-thumbs-up"></i></span> </div> <div class="post-offset"> <div class="answer fmt"> <p>Essayez une expression ungreedy en ajoutant le drapeau U:</p> <pre><code class="prettyprint-override">"/<title>(.+)</title>/U" </code></pre> <p>Cela indique à correspondre sur le match le plus petit plutôt que le plus grand match de disponible.</p> </div> <div class="post-info"> <div class="post-meta row"> <p class="text-secondary col-lg-6"> <span class="source"> <a rel="noopener" target="_blank" href="https://stackoverflow.com/q/4341440">Source</a> </span> </p> <p class="text-secondary col-lg-6"> <span class="float-right date"> <span>2010-12-03 00:33:19</span> <a rel="noopener" target="_blank" href="https://stackoverflow.com/users/471800/">Hamish</a></span> </p> <p class="col-12"></p> <p class="col-12"></p></div> </div> </div> </article> <article class="board-top-1 padding-top-10"> <div class="post-col vote-info"> <span class="count">2<i class="fa fa-thumbs-up"></i></span> </div> <div class="post-offset"> <div class="answer fmt"> <p>Le RSS que vous avez posté est du XML bien formé, mais pas du RSS valide (selon le validateur de flux du W3C). Comme il est bien formé, votre meilleur pari est toujours d'utiliser un analyseur XML, pas d'utiliser une regex. En fait, la plupart des analyseurs de flux RSS devraient aussi bien fonctionner, car RSS est connu pour avoir des problèmes de validation (en partie à cause de mauvaises spécifications), donc tout analyseur RSS utile ne devrait pas avoir de problèmes avec les types de problèmes de validation. Le validateur W3C rapporte. En aparté, cela ressemble à un flux Google Actualités. Vous pouvez obtenir Atom valide en changeant le paramètre de sortie de "rss" à "atom". Par exemple:</p> <pre><code class="prettyprint-override">http://news.google.com/news?pz=1&cf=all&ned=us&hl=en&topic=h&num=3&output=atom </code></pre> <p>Les services Google qui génèrent des flux effectuent généralement un meilleur travail de production d'Atom plutôt que de RSS. Cela dit, vous pouvez également signaler le RSS non valide à Google.</p> </div> <div class="post-info"> <div class="post-meta row"> <p class="text-secondary col-lg-6"> <span class="source"> <a rel="noopener" target="_blank" href="https://stackoverflow.com/q/4341631">Source</a> </span> </p> <p class="text-secondary col-lg-6"> <span class="float-right date"> <span>2010-12-03 01:13:12</span> </p> <p class="col-12"></p> <p class="col-12"></p></div> </div> <!-- comments --> <div class="comments"> <div itemprop="comment" class="post-comment"> <div class="row"> <div class="col-lg-1"><span class="text-secondary">+0</span></div> <div class="col-lg-11"> <p class="commenttext">+1 Bonne réponse – <span class="text-secondary"> <small> <span></span> </small> </span> </p> </div> </div> </div> </div> </div> </article> <article class="board-top-1 padding-top-10"> <div class="post-col vote-info"> <span class="count">0<i class="fa fa-thumbs-up"></i></span> </div> <div class="post-offset"> <div class="answer fmt"> <p>De nombreux analyseurs peuvent gérer de légères différences par rapport aux spécifications. Toute liaison à l'excellente bibliothèque <a href="http://xmlsoft.org/" rel="nofollow">libxml2</a> serait capable de gérer du XML mal formé. Il existe des liaisons dans plusieurs langues. Par exemple, l'extrait Ruby suivant il parse très bien:</p> <pre><code class="prettyprint-override">require 'nokogiri' xml = open('rss.txt').read doc = Nokogiri::XML.parse(xml) doc.xpath('//title').each do |title| puts title.inner_text end </code></pre> <p>Résultat:</p> <pre><code class="prettyprint-override">"joint terrorism task force" location:oregon - Google News "joint terrorism task force" location:oregon - Google News Federal and FBI Joint Terrorism Task Force are still flawed - OregonLive.com Striking a fair balance - OregonLive.com Blame the terrorists, not the FBI - Portland Tribune Why Oregon? Why not?: Terrorism can strike anywhere - The Register-Guard INDIVIDUAL TRAVEL UNDER ATTACK - NewsWithViews.com The other terrorism-and pondering Portland - BlueOregon Fla. dance troupe causes scare at Lincoln Tunnel - Northwest Cable News </code></pre> <p>Edit: en fonction de vos commentaires que je vois que vous utilisez jQuery. Vous devriez être capable d'utiliser un analyseur XML jQuery pour extraire les titres (et d'autres parties, si nécessaire).</p> </div> <div class="post-info"> <div class="post-meta row"> <p class="text-secondary col-lg-6"> <span class="source"> <a rel="noopener" target="_blank" href="https://stackoverflow.com/q/4341678">Source</a> </span> </p> <p class="text-secondary col-lg-6"> <span class="float-right date"> <span>2010-12-03 01:23:45</span> </p> <p class="col-12"></p> <p class="col-12"></p></div> </div> <!-- comments --> <div class="comments"> <div itemprop="comment" class="post-comment"> <div class="row"> <div class="col-lg-1"><span class="text-secondary">+0</span></div> <div class="col-lg-11"> <p class="commenttext">L'analyseur XML jQuery échoue silencieusement.Si analysé comme XML, j'obtiens un retour du XML dans l'inspecteur web, mais la valeur réelle retournée est 'null'. demandez-le en texte brut, ça revient bien, c'est pourquoi je faisais de la regexing. – <span class="text-secondary"> <small> <span></span> </small> </span> </p> </div> </div> </div> </div> </div> </article> <div> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-6208739752673518" data-ad-slot="1038284119" data-ad-format="auto" data-full-width-responsive="true"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> <article class="board-top-1 padding-top-10"> <div class="post-col vote-info"> <span class="count">1<i class="fa fa-thumbs-up"></i></span> </div> <div class="post-offset"> <div class="answer fmt"> <p>Essayez un quantificateur paresseux:</p> <pre><code class="prettyprint-override"><title>([^<]+?)</title> </code></pre> </div> <div class="post-info"> <div class="post-meta row"> <p class="text-secondary col-lg-6"> <span class="source"> <a rel="noopener" target="_blank" href="https://stackoverflow.com/q/4341818">Source</a> </span> </p> <p class="text-secondary col-lg-6"> <span class="float-right date"> <span>2010-12-03 01:58:23</span> </p> <p class="col-12"></p> <p class="col-12"></p></div> </div> </div> </article> </div> <div class="clearfix"> </div> <div> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <ins class="adsbygoogle" style="display:block" data-ad-format="autorelaxed" data-ad-client="ca-pub-6208739752673518" data-ad-slot="1575177025"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> <div class="padding-top-10"></div> </div> </div> <script type="text/javascript" src="http://img.uwenku.com/uwenku/script/side.js?t=1644592048548"></script> <script type="text/javascript" src="http://img.uwenku.com/uwenku/plugin/highlight/highlight.pack.js"></script> <link href="http://img.uwenku.com/uwenku/plugin/highlight/styles/docco.css" media="screen" rel="stylesheet" type="text/css" /> <script type="text/javascript"> $('pre').each(function(i, e) { hljs.highlightBlock(e, "<span class='indent'> </span>", false) }); </script> <div class="col-lg-3 col-md-4 col-sm-5"> <div id="rightTop"> <div class="row"> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-6208739752673518" data-ad-slot="5415218910" data-ad-format="auto" data-full-width-responsive="true"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> <div class="row sidebar panel panel-default"> <div class="panel-heading font-bold"> Dernière question </div> <div class="m-b-sm m-t-sm clearfix"> <ul class="side_article_list"> <li class="side_article_list_item"> 1. <a href="http://fr.uwenku.com/question/p-dejcufdb-bc.html" target="_blank" title="comment ajouter deux chaînes Hexa en C# .net"> comment ajouter deux chaînes Hexa en C# .net </a> </li> <li class="side_article_list_item"> 2. <a href="http://fr.uwenku.com/question/p-tvldlmut-bb.html" target="_blank" title="Le script PHP s'exécute plusieurs fois lorsqu'il n'est invoqué qu'une seule fois sur la ligne de commande. Seule la sortie de la première exécution est envoyée à stdout"> Le script PHP s'exécute plusieurs fois lorsqu'il n'est invoqué qu'une seule fois sur la ligne de commande. Seule la sortie de la première exécution est envoyée à stdout </a> </li> <li class="side_article_list_item"> 3. <a href="http://fr.uwenku.com/question/p-knqzytul-bb.html" target="_blank" title="Auto complète en VC++"> Auto complète en VC++ </a> </li> <li class="side_article_list_item"> 4. <a href="http://fr.uwenku.com/question/p-pagkmdbt-be.html" target="_blank" title="Pear CodeSniffer Cyclomatic Complexity"> Pear CodeSniffer Cyclomatic Complexity </a> </li> <li class="side_article_list_item"> 5. <a href="http://fr.uwenku.com/question/p-tyiyuulj-bd.html" target="_blank" title="dialog-button text"> dialog-button text </a> </li> <li class="side_article_list_item"> 6. <a href="http://fr.uwenku.com/question/p-pljzppwx-y.html" target="_blank" title="Comment puis-je spécifier le nombre de décimales d'un BigDecimal à imprimer?"> Comment puis-je spécifier le nombre de décimales d'un BigDecimal à imprimer? </a> </li> <li class="side_article_list_item"> 7. <a href="http://fr.uwenku.com/question/p-zgmsbgpb-z.html" target="_blank" title="Où puis-je apprendre/trouver des exemples de reconnaissance de gestes diffusés à partir de Kinect, en utilisant OpenCV?"> Où puis-je apprendre/trouver des exemples de reconnaissance de gestes diffusés à partir de Kinect, en utilisant OpenCV? </a> </li> <li class="side_article_list_item"> 8. <a href="http://fr.uwenku.com/question/p-gqshlqek-z.html" target="_blank" title="Comment faire pour résoudre les erreurs Grails Colonne répétée dans le mappage pour l'entité? sur la base de données existant Postgresql"> Comment faire pour résoudre les erreurs Grails Colonne répétée dans le mappage pour l'entité? sur la base de données existant Postgresql </a> </li> <li class="side_article_list_item"> 9. <a href="http://fr.uwenku.com/question/p-xwstfrms-ba.html" target="_blank" title="Diffusion vidéo en continu dans iphone"> Diffusion vidéo en continu dans iphone </a> </li> <li class="side_article_list_item"> 10. <a href="http://fr.uwenku.com/question/p-dsksxhtr-v.html" target="_blank" title="ignore les données utilisateur en rendu html"> ignore les données utilisateur en rendu html </a> </li> </ul> </div> </div> </div> <p class="article-nav-bar"></p> <div class="row sidebar article-nav"> <div class="row box_white visible-sm visible-md visible-lg margin-zero"> <div class="top"> <h3 class="title"><i class="glyphicon glyphicon-th-list"></i> Questions connexes</h3> </div> <div class="article-relative-content"> <ul class="side_article_list"> <li class="side_article_list_item">Aucun problème connexe^_^</li> </ul> </div> </div> </div> </div> </div> </div> </div><!-- wrap end--> <!-- footer --> <footer id="footer"> <div class="bg-simple lt"> <div class="container"> <div class="row padder-v m-t"> <div class="col-xs-8"> <ul class="list-inline"> <li><a href="http://fr.uwenku.com/contact">Nous contacter</a></li> <li>© 2020 FR.UWENKU.COM</li> <li><a target="_blank" href="https://beian.miit.gov.cn/">沪ICP备13005482号-4</a></li> <li><script type="text/javascript" src="https://v1.cnzz.com/z_stat.php?id=1280101193&web_id=1280101193"></script></li> <li><a href="http://www.uwenku.com/" target="_blank" title="优文库">简体中文</a></li> <li><a href="http://hk.uwenku.com/" target="_blank" title="優文庫">繁體中文</a></li> <li><a href="http://ru.uwenku.com/" target="_blank" title="поле вопросов и ответов">Русский</a></li> <li><a href="http://de.uwenku.com/" target="_blank" title="Frage - und - antwort - Park">Deutsch</a></li> <li><a href="http://es.uwenku.com/" target="_blank" title="Preguntas y respuestas">Español</a></li> <li><a href="http://hi.uwenku.com/" target="_blank" title="कार्यक्रम प्रश्न और उत्तर पार्क">हिन्दी</a></li> <li><a href="http://it.uwenku.com/" target="_blank" title="IL Programma di chiedere Park">Italiano</a></li> <li><a href="http://ja.uwenku.com/" target="_blank" title="プログラム問答園区">日本語</a></li> <li><a href="http://ko.uwenku.com/" target="_blank" title="프로그램 문답 단지">한국어</a></li> <li><a href="http://pl.uwenku.com/" target="_blank" title="program o park">Polski</a></li> <li><a href="http://tr.uwenku.com/" target="_blank" title="Program soru ve cevap parkı">Türkçe</a></li> <li><a href="http://vi.uwenku.com/" target="_blank" title="Đáp ứng viên">Tiếng Việt</a></li> <li><a href="http://fr.uwenku.com/" target="_blank" title="Programme interrogation Park">Française</a></li> </ul> </div> </div> </div> </div> </div> </footer> <!-- / footer --> <script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?f78a970f17b19a79fc477a3378096f29"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script> </body> </html>