2016-07-14 26 views
0

Ich habe folgende Zeichenfolge:Wie Regex für ein einzelnes Zeichen in einem String verwenden?

LoopStep(i,0,m-1,1) 

und ich möchte Regex verwenden, so dass ich nur die erste finden „(“ zum Beispiel meine regex Code ist. \\([^)]*\\) ich zum ersten offen überprüfen möchten Klammer nur so habe ich kein Problem mit diesem Code:..

LoopStep ((i,0,m-1,1)). 
+1

Wenn Sie nur die Position des ersten '(' dann die 'indexOf' Methode der Klasse' String' verwenden möchten, finden, die Sie dieser einfachen regulären Ausdruck nicht brauchen für somehing : 'int index = input.indexOf ('(');' – Jesper

+0

Warum brauchst du Regex? [indexOf] (https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#indexOf (java.lang.String)) – StackFlowed

+1

Sie verwenden keine Anführungszeichen? –

Antwort

1

Wenn Sie nur auf überprüfen möchten, ob Ihr String enthält keine zwei aufeinanderfolgende Klammern, können Sie indexOf oder contains anstelle von regulären Ausdrücken verwenden:

// will return true only if the String doesn't contain ((
// you can also use to infer actual index 
test.indexOf("((") == -1 
// same and better but you can't use the index 
!test.contains("((") 

Hinweis darauf, dass hier test gewünschten ist String Variable, z mit Wert "LoopStep(i,0,m-1,1)".

Wenn Sie tatsächlich eine Syntax analysieren, die anscheinend der Fall ist, verwenden Sie keine regulären Ausdrücke.

Sie müssen wahrscheinlich Ihren eigenen Parser erstellen, um die Syntax Ihrer Metasprache zu überprüfen und analysieren.

Hinweis

Nur dir einen Einblick zu geben, was Sie verwirrt einlassen könnten, wenn Sie reguläre Ausdrücke verwenden, die Syntax in diesem Fall, hier ist ein regex Beispiel für Ihre ganze String überprüfen gegen Mal in Folge zu validieren Klammer ("(("):

//   | non-parenthesis 
//   | | or 
//   | | | not preceded by parenthesis 
//   | | |  | actual parenthesis 
//   | | |  | | not followed by parenthesis 
//   | | |  | |  | 1+ length(adjust with desired quantifier) 
test.matches("([^(]|(?<!\\()\\((?!=\\())+") 
-1

Sie können das Fragezeichen verwenden, wenn Sie es zu einem regulären Ausdruck hinzuzufügen, wird es nicht gierige zum Beispiel das Muster „("wird alle Ihre offenen Klammern übereinstimmen, während" (? "wird nur das erste Vorkommen übereinstimmen.

+0

und für die letzte? Ich habe versucht mit \ Z, aber aus irgendeinem Grund funktioniert es nicht –

+0

Möchten Sie die erste der geschlossenen Klammern oder die letzte? – Aurasphere

+0

Ich muss beide überprüfen, wenn der LoopStep gefolgt von "(" und es endet mit ")" –