web-dev-qa-db-fra.com

Expression régulière pour faire correspondre les parenthèses

Quelle est l'expression régulière pour la correspondance '(' dans une chaîne?

Voici le scénario:

J'ai une ficelle

str = "abc(efg)";

Je veux diviser la chaîne à '(' en utilisant l'expression régulière.Pour que j'utilise

Arrays.asList(Pattern.compile("/(").split(str))

Mais je reçois l'exception suivante.

Java.util.regex.PatternSyntaxException: Unclosed group near index 2
/(

S'échapper '(' ne semble pas fonctionner.

53
Ammu

Deux options:

Premièrement, vous pouvez y échapper en utilisant une barre oblique retour - \(

Alternativement, comme il s’agit d’un seul caractère, vous pouvez le placer dans une classe de caractères où il n’est pas nécessaire de l’échapper - [(]

90
Spudley
  • Vous pouvez échapper à tout méta-caractère en utilisant une barre oblique inversée, de sorte que vous puissiez faire correspondre ( Au motif \(.
  • De nombreuses langues sont fournies avec une fonction d'échappement intégrée, par exemple, Regex.Escape de Java ou Pattern.quote
  • Certaines versions prennent en charge \Q Et \E, Avec un texte littéral entre elles.
  • Certaines versions (VIM, par exemple) correspondent littéralement à ( Et requièrent \( Pour capturer des groupes.

Voir aussi: Référence de la syntaxe de base des expressions régulières

5
Kobi

La solution consiste en un motif regex correspondant aux parenthèses ouvrantes et fermantes.

String str = "Your(String)";
// parameter inside split method is the pattern that matches opened and closed parenthesis, 
// that means all characters inside "[ ]" escaping parenthesis with "\\" -> "[\\(\\)]"
String[] parts = str.split("[\\(\\)]");
for (String part : parts) {
   // I print first "Your", in the second round trip "String"
   System.out.println(part);
}

En écrivant dans le style de Java 8, cela peut être résolu de cette façon:

Arrays.asList("Your(String)".split("[\\(\\)]"))
    .forEach(System.out::println);

J'espère que c'est clair.

3

Pour tous les caractères spéciaux, vous devez utiliser '\'. Donc, pour faire correspondre les parenthèses -/\ (/

2
StKiller

Parce que ( Est spécial dans regex, vous devriez l'échapper \( Lors de la correspondance. Toutefois, selon la langue utilisée, vous pouvez facilement associer ( À des méthodes de chaîne telles que index() ou à d'autres méthodes vous permettant de rechercher à quelle position se trouve le (. po Parfois, il n’est pas nécessaire d’utiliser regex.

1
kurumi