2017-05-08 2 views
0

ich eine Zeichenfolge zwischen dem „@Funktion“ zu bekommen versuchen und „@“ für die Eingabezeichenfolge:des String zwischen Sonderzeichen in Java unter Verwendung von Regex

inputText = "@function square @default 2 @type Int @brief squares default number" 

Was, um den reguläre Ausdruck wäre, bekomme den Text zwischen '@function' und '@'?

Damit die folgende (in Java):

Pattern p = Pattern.compile(some magic regex expression...); 
Matcher m = p.matcher(inputText); 
functionName = m.group; 
System.out.println(functionName); 

"square" drucken

+0

zu trimmen wäre es '@ function', gefolgt von null oder mehr Buchstaben, die nicht '@' sind. Die JavaDocs für Pattern erklären über Zeichenklassen: https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html – yshavit

Antwort

3

regex:

@function(.*?)@

Dies sollte "square" in den ersten Platz Capturing-Gruppe. Sie können dann Matcher.group(int) verwenden, um diese Gruppe zu erfassen. Wie aus dem folgenden Code:

functionName = m.group(1);

Gruppe (int-Gruppe) die Eingangsfolge von der gegebenen Gruppe während der vorherigen Übereinstimmungsoperation erfaßt Kosten.

https://docs.oracle.com/javase/7/docs/api/java/util/regex/Matcher.html#group(int)

EDIT

hinzugefügt '\ s' Leerzeichen

https://regex101.com/r/PH54FV/1

+0

Ich bekomme die Ausnahme: "Ausnahme im Thread" main "Java .lang.IllegalStateException: Keine Übereinstimmung gefunden \t bei java.util.regex.Matcher.group (Matcher.java:485) "Nicht sicher warum. – user2836816

+0

'if (m.find()) {.... m.gruppe (1) ...}' –

+0

Die Backslashes für die Leerraum-Escapes müssen sich selbst entwischen. Ich entfernte sie, um ein wenig Verwirrung zu lindern. – quackenator

Verwandte Themen