Spezieller Regex gesucht

Hallo!

Code:
   /**
    * 
    */
   package de.tutorials;
   
   import java.util.regex.Matcher;
   import java.util.regex.Pattern;
   
   /**
    * @author Tom
    * 
    */
   public class Foo {
   	/**
   	 * @param args
   	 */
   	public static void main(String[] args) {
   
 		String str = "<vcc:headingCellProperty column=\"3\" row=\"0\" width=\"125\" value=\"Buyer name\" sorted=\"true\" />";
   
   		String regex = "value=\"([^\"]*)";
   		Matcher matcher = Pattern.compile(regex).matcher(str);
   		if (matcher.find()) {
   			System.out.println(matcher.group(1));
   		}
   
   	}
   }

gruß Tom
 
Nochmal Danke für die Hilfe, aber ich hab schon wieder ein Problem :confused: :offtopic:

Es kann ja nun sein, dass dieser Tag mehrfach auftaucht. Kann ich irgendwie durch den Matcher iterieren, oder muss ich umständlich den endindex des ersten Ergebnisses nehmen und die Suche ab dieser Stelle erneut durchführen?

thx
 
Ok. Den nächsten Match sucht die find()-Methode :)
Das funktioniert auch ganz gut mit einfachen Sachen:
Code:
String test = "Stück für Stück wird ein test getestet";
        String regex = "Stück";

        Matcher matcher = Pattern.compile(regex).matcher(test);
        if(matcher.find()){
            System.out.println(matcher.group());
            if(matcher.find(matcher.end())){
                System.out.println(matcher.group(1));
            }

        }
Ausgabe:
Stück
Stück
Aber mit dem Tag und group(1) funktioniert das nicht. Ich hab einfach den Tag noch zweimal angefügt und den value geändert -> er gibt mir aber immer den value des letzten Tags aus, obwohl er mir doch eigentlich die ersten beiden geben müsste (nach meiner Logik)
 
Code:
 public static void main( String[] args ) {
        String test = "<vcc:headingCellProperty column=\"3\" row=\"0\" width=\"125\" value=\"Buyer name\" sorted=\"true\" />" +
                "blabla<vcc:headingCellProperty column=\"3\" row=\"0\" width=\"125\" value=\"test string\" sorted=\"true\" />" + 
                "huibla<vcc:headingCellProperty column=\"3\" row=\"0\" width=\"125\" value=\"nochmal\" sorted=\"true\" />";
        String regex = " .*value=\"(\\w.*?)\" ";

        Matcher matcher = Pattern.compile(regex).matcher(test);
        while(matcher.find()){
            System.out.println(matcher.group(1) + "\t" + matcher.start());
        }
    }
Sehr seltsam: Wenn ich das ausführe gibt er mir aus: nochmal 24. Anscheinend beginnt er am Ende des Strings (denn sonst müsste der startindex des matches ja wesentlich höher sein).

Wenn ich diesen String + regex mit dem oben verlinkten RegexTester durchführe funktioniert es so wie es soll. Bei "next match" gibt er mir nacheinander (in der richtigen Reighenfolge) die values aus.
 
Das Problem hier(frag mich aber bitte nicht wieso ;) ) ist das der ganze Text hintereinander steht...
Code:
 String test = "<vcc:headingCellProperty column=\"3\" row=\"0\" width=\"125\" value=\"Buyer name\" sorted=\"true\" />\n" +
                "blabla<vcc:headingCellProperty column=\"3\" row=\"0\" width=\"125\" value=\"test string\" sorted=\"true\" />\n" + 
                "huibla<vcc:headingCellProperty column=\"3\" row=\"0\" width=\"125\" value=\"nochmal\" sorted=\"true\" />\n";
fuegst du wie hier gezeigt ein \n am ende jedes Strings ein dann klappt es..
 
Hallo!

wie wärs denn damit:
Code:
  package de.tutorials;
  
  import java.util.regex.Matcher;
  import java.util.regex.Pattern;
  
  public class RegexExample {
  
  	 public static void main( String[] args ) {
 			String test = "<vcc:headingCellProperty column=\"3\" row=\"0\" width=\"125\" value=\"Buyer name\" sorted=\"true\" />" +
 			 "blabla<vcc:headingCellProperty column=\"3\" row=\"0\" width=\"125\" value=\"test string\" sorted=\"true\" />" + 
 			 "huibla<vcc:headingCellProperty column=\"3\" row=\"0\" width=\"125\" value=\"nochmal\" sorted=\"true\" />";
  			String regex = "value=\"([^\"]*)";
  
  			Matcher matcher = Pattern.compile(regex).matcher(test);
  			while(matcher.find()){
 				System.out.println(matcher.group(1));
  			}
  		}
  }

Ausgabe:
Buyer name
test string
nochmal

Gruß Tom
 
Danke Danke Danke jetzt kann ich endlich weitermachen.
Ich versteh aber trotzdem ncht ganz warum der vorherige regex bei dem tool funktioniert hat.
 
Ich hatte es auch in einem RegEx Tester versucht und es klappte, bis mir dann auffiehl das die Zeilen untereinander standen und nicht hintereinander..evt war das bei dir ja auch so...
Aber Thomas hat ja eine Loesung fuer alles :)
 
Und weiter gehts.
Neben den speziellen Tags brauch ich teilweise auch noch den Inhalt von normalen HTML-Tags. Diese Tags werden in einer txt angegeben
Code:
<td class="dunkelBlauWeiss">Lieferantennummer / AdressIndex<br>(local supplier code)</td> // hier brauch ich den Inhalt

<td><vcc:textFieldComponent size="12" width="110" maxlength="30" name="NUMMER" /></td> // hier brauch ich ihn nicht
Code:
String regex = "<td.*>(.*)</td>" // wird im Programm je nach spezifizierten Tag zusammengebastelt
Leider bekomme ich hier nur local supplier code zurück.
Ich hab schon mit [^br] usw rumprobiert, aber dann stimmen andere Sachen nicht mehr.
Er soll also in der Gruppe einfach die <br>-Tags mitnehmen.

thx
 
Zurück