*Markus: Matcher findet nur ein Ergebnis pro Zeile

Hallo,

ich habe folgenden Ausdruck:

  
             Matcher matcher = Pattern.compile( "(href=\"(/photos/[\\d@\\w-]+/\\d+/[\\w\\d/-]+/)\")+" ).matcher(contentSite);  
             while( matcher.find() )   {  
                  System.out.println( matcher.group(1));  
                  //  
             }  

.
Dieser soll bestimmte Strings aus einer Webseite extrahieren. Das Problem ist nur, dass er den gefundenen String genau einmal findet, obwohl am Schluss des Ausdrucks ein + steht.
Die von mir gesuchten Links befinden sich nämlich in einer Zeile genau nebeneinander, und dummerweise findet der Ausdruck nur den ersten vorkommenden, obwohl die Links von der Struktur gleich sind. Daran kann es also nicht liegen, aber woran liegt es dann?

Markus

  1. Poste doch mal ein Beispiel. So wie du es geschrieben hast, sollte das ganze so aussehen (ohne Leerzeichen zwischen dem letzten " und dem folgenden href): href="..."href="..."

    Im Übrigen denke ich, dass das Problem ein anderes ist - selbst wenn der Ausdruck korrekt ist, wird bei quantifizierten (+) Gruppe immer nur das erste Element angezeigt. Sonst wäre dein Ausdruck nicht deterministisch, ein bestimmter Teil könnte immer einen anderen Index haben. Entweder du lässt das "+" weg und wendest den Ausdruck über deine while-Schleife öfters an, oder Du setzt den ganzen Ausdruck nochmals in eine Klammer und hast dann beide Links in einem String stehen

    Matcher matcher = Pattern.compile( "((href="(/photos/[\d@\w-]+/\d+/[\w\d/-]+/)")+)" ).matcher(contentSite);

    1. Hallo,

      Poste doch mal ein Beispiel. So wie du es geschrieben hast, sollte das ganze so aussehen (ohne Leerzeichen zwischen dem letzten " und dem folgenden href): href="..."href="..."

      Ja, im Prinzip trifft diese Übereinstimmung zu.

      Die URLs im Text sehen so aus...

      <a href="/photos/14341958@N03/1462732789/in/set-72157602215466831/" title="Europa-USA" class="image_link" id="set_thumb_link_1462732789"><img src="http://grafikurl.jpg" alt="Europa-USA" height="75" width="75"></a><a href="/photos/14341958@N03/1462732797/in/set-72157602215466831/" title="Anandsser" class="image_link" id="set_thumb_link_1462732797"><img src="http://grafikurl2.jpg" alt="Anandsser" height="75" width="75"></a> usw usw.........</div>

      Ich will immer diesen Teil jedes Links.

      /photos/14341958@N03/1462732797/in/set-72157602215466831/

      Matcher matcher = Pattern.compile( "((href="(/photos/[\d@\w-]+/\d+/[\w\d/-]+/)")+)" ).matcher(contentSite);

        
      Dieser Ausdruck bewirkt keine Änderung im Code. Außerdem, wie meinst du das mit while? Ein regulärer Ausdruck ist ja dafür da, dass dieser den Code durchläuft, denn sonst könnte ich ja theoretisch auch Zeichen für Zeichen mit substring vergleichen, aber besonders effizient wäre das natürlich nicht.  
        
      Markus
      
      -- 
      <http://www.apostrophitis.at>  
        
      ![](http://signatur.pithax.net/linuxbanner.gif)
      
      1. Nachtrag:

        Offensichtlich ein Eclipse-Bug.
        Führe ich das Script in der Konsole aus, passt es.

        1. Hallo,

          Offensichtlich ein Eclipse-Bug.
          Führe ich das Script in der Konsole aus, passt es.

          Ein Eclipse-Bug? Eclipse macht nichts anderes als die VM mit deinem Programm
          als Programmargument zu starten, ungefähr so wie du es auf der Konsole tust.

          Gruß
          Slyh