J'ai une ficelle str = "Jake!!!Jackson!!!Tyson\\!!!!!!Pete"
Je veux diviser la chaîne !!!
mais l'ignorer si le caractère précédent !!!
est "\\"
.
Je suis venu str.split("(?<!\\\\)!!!");
Mais la sortie est Jake,Jackson,Tyson\!,!!Pete
et la sortie attendue estJake,Jackson,Tyson\!!!,Pete
Cela peut-il être accompli par regex?
Je pense que ce qui suit pourrait fonctionner:
(?<!\\)!!!(?=(?:!!!)*(?!!))
Voir la démo en ligne
(?<!\\)
- Affirmez la position non précédée d'une barre oblique inverse littérale.!!!
- Littéralement trois points d'exclamation.(?=
- Ouvrir une anticipation positive:
(?:
- Ouvrir un groupe sans capture:
!!!
- Littéralement trois points d'exclamation.)*
- Fermez le groupe sans capture et faites correspondre plus de 0 fois.(?!!)
- Recherche négative pour le point d'exclamation.)
- Fermez la recherche positive.Cela diviserait une chaîne comme Jake!!!Jackson!!!Tyson\!!!!!!!Pete
inclure un NULL aussi (en supposant que c'est ce que vous recherchez). En tant que chaîne Java:"(?<!\\\\)!!!(?=(?:!!!)*(?!!))"
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots