ich eine Regex will Zeichenfolge zwischen zwei Zeichen zu finden, aber nur von Startdelimiter bis zum ersten Auftreten von EndebegrenzersRegexMuster Zeichenfolge zwischen zwei Zeichen für die Suche nach - aber die erste Vorkommens des zweiten Zeichens
ich Geschichte extrahieren möchte aus die Linien der folgenden Format
<metadata name="user" story="{some_text_here}" \/>
Deshalb möchte ich nur extrahieren: {some_text_here}
Dafür habe ich die folgende regex bin mit:
<metadata name="user" story="(.*)" \/>
und Java-Code:
public static void main(String[] args) throws IOException {
String regexString = "<metadata name="user" story="(.*)" \/>";
String filePath = "C:\\Desktop\\temp\\test.txt";
Pattern p = Pattern.compile(regexString);
Matcher m;
try (BufferedReader br = new BufferedReader(new FileReader(filePath))) {
String line;
while ((line = br.readLine()) != null) {
m = p.matcher(line);
if (m.find()) {
System.out.println(m.group(1));
}
}
}
}
Diese Regex meist funktioniert gut, aber überraschend, wenn die Linie ist:
<metadata name="user" story="My name is Nick" extraStory="something" />
Ausführen der Code auch My name is Nick" extraStory="something
filtert, wo ich nur sicherstellen möchten, dass ich bekomme My name is Nick
Auch ich möchte sicherstellen, dass es tatsächlich keine Informationen zwischengibtund vor />
[Pflichtlink] (http://stackoverflow.com/a/1732454/2071828). –
Sie möchten den Quantifizierer nicht gierig machen oder das Endzeichen ausschließen. –
Was Sie brauchen, ist ein kontextsensitiver Parser, der Regex nicht ist. – Aaron