2 votes

expression régulière avec lookbehind de longueur variable et de largeur nulle en Java

Je sais que Java ne prend pas en charge les raccourcis de longueur variable et de largeur nulle, mais existe-t-il un moyen efficace d'imiter le comportement souhaité ?

Le texte auquel j'applique la regex est quelque chose comme :

blah words blah [tag platform="platform1, platform5" future]Blah Blah blah[/tag] blah more words

Dans la balise d'ouverture, il peut y avoir un nombre quelconque de plates-formes dans la liste, dans n'importe quel ordre, et il y a un nombre fini de valeurs possibles. Le résultat souhaité est d'obtenir le texte entre les balises :

Blah Blah blah

C'est ce que je veux faire pour représenter la liste variable des plateformes :

(?<=\\[tag platform=\\\\\".*?\\\\\" future\\]).*?(?=\\[/tag\\])

Mais bien sûr, une exception est levée avec le message suivant Look-behind group does not have an obvious maximum length .

J'ai pensé à utiliser une regex pour obtenir la chaîne entière, y compris les balises (ce qui est facile), puis à analyser la chaîne. Mais cela semble un peu trop spécifique et j'aimerais une solution plus sûre.

2voto

TheLostMind Points 10813

Cela devrait fonctionner pour vous. Pas besoin d'un look-behind Il suffit de "capturer" la partie nécessaire et de remplacer toute la chaîne (ou autre chose).

public static void main(String[] args) {
    String s = "blah words blah [tag platform=\"platform1, platform5\" future]Blah Blah blah[/tag] blah more words";
    s = s.replaceAll(".*?\\[tag.*?\\](.*?)(?=\\[.*).*", "$1");
    System.out.println(s);
}

O/P :

Blah Blah blah

0voto

doom87er Points 409

Vous pouvez utiliser des groupes de non-capture pour inclure des éléments dans un match, mais pas dans une capture. Rappelez-vous simplement de tirer du premier groupe de capture, plutôt que de l'ensemble du match.

(?:\[tag platform=\".*?\" future\])(.*?)(?:\[\/tag\])

Sur Regex101

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X