J'ai un regEx def regex = "^Line[\s]+(?:(\d+)\s)?\s*:\s+(\d+)?.+";
qui correspond aux chaînes ci-dessous
Line 1 : testMessage1
Line : 2 testMessage2
Maintenant, j'essaie de faire regex pour faire :
comme facultatif pour qu'il puisse correspondre à des chaînes comme
Line 3 testMessage3
J'ai essayé de changer mon regEx en tant que ^Line[s]+(?:?(d+)s)?s*:?s+(d+)?.+
java.util.regex.PatternSyntaxException: Dangling meta character "?" near index 13
^Line[s]+(?:?(d+)s)?s*:?s+(d+)?.+
quelqu'un peut-il m'aider s'il vous plaît à réparer le regEx?
Réponses:
2 pour la réponse № 1Vous avez une erreur de syntaxe dans votre regex:
^Line[s]+(?:?(d+)s)?s*:?s+(d+)?.+
^----- Here, remove this "?"
Par contre, si vous voulez que les deux points soient optionnels, vous devez corriger le problème. s
:
Lines+(?:(d+)s*)?s*:?s+(d+)?.+
^---- Here
De plus, j'ai nettoyé un peu votre regex que vous pourriez trouver utile:
Lines+(d)?s*:?s*(d)?.*
1 pour la réponse № 2
^Line[s]+(?:?(d+)s)?s*:?s+(d+)?.+
^----- This is a mistake
le ?
il y a une erreur, parce que le :
fait partie d'un (?:...)
expression de regroupement, pas un littéral :
personnage.
Essayons de retravailler votre regex en fonction de vos besoins:
- Commencer avec
Line
- Suivi d'au moins 1 espace
- Suivi par l'un des:
- Chiffres et un ou plusieurs espaces et
:
:
et un ou plusieurs espaces et chiffres- Chiffres
- Chiffres et un ou plusieurs espaces et
- Suivi par l'espace
- Suivi de quoi que ce soit
Ce modèle correspond à vos 3 exemples:
"^Line\s+(\d+\s+:|:\s+\d+|\d+) .*"