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.
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 - [(]
(
Au motif \(
.Regex.Escape
de Java ou Pattern.quote
\Q
Et \E
, Avec un texte littéral entre elles.(
Et requièrent \(
Pour capturer des groupes.Voir aussi: Référence de la syntaxe de base des expressions régulières
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.
Pour tous les caractères spéciaux, vous devez utiliser '\'. Donc, pour faire correspondre les parenthèses -/\ (/
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.