2015-04-11 1 views
2

Bien que je lis un grand nombre de publications sur le sujet (en particulier en utilisant des lookarounds), je n'ai pas compris si ce cas plus général peut être résolu en utilisant des expressions régulières.java regex: négation d'un match

configuration:
1) une expression régulière est passé dans
2) l'expression rationnelle d'entrée est intégré dans un regex négatif de sorte que
3) tout ce qui est pas identifié par l'entrée regex d'entrée est adaptée

Exemple:

suivant:

input regex: "[-//s]"; 

et

text: "self-service restaurant" 

Je veux une expression régulière négative dans laquelle à intégrer mon regex d'entrée afin que je puisse correspondre à mon texte:

"self", "service", "restaurant" 

Fait important, l'expression régulière négative devrait également être en mesure de correspondre à une chaîne simple comme:

"restaurant" 

Note, ce que je veux faire pourrait être atteint changer l'expression rationnelle d'entrée de

"[-//s]" 

à

"[^-//s]" 

Pourtant, je suis après une approche plus générale où l'on peut une expression régulière être passé dans une expression rationnelle négative.

+0

essayer '[^ - \\ s] +'.Utilisez la même chose pour tous. –

+2

On dirait que vous voulez scinder votre chaîne sur regex passée (vous pouvez juste entourer regex passée avec '(?: UserRegex) +' pour éviter des résultats vides comme '" fo - o ".split (" - ")' où le résultat serait '[" fo "," "," o "]'). – Pshemo

+0

'String myRegex =" [^ "+" yourRegexHere "' pourrait faire l'affaire, si je comprends bien votre question. – JonasCz

Répondre

1

Vous pouvez réaliser ceci par l'appariement ou le fractionnement.

  1. Grâce à la correspondance.

    String s = "self-service restaurant"; 
    Matcher m = Pattern.compile("[^-\\s]+").matcher(s); 
    while(m.find()) { 
        System.out.println(m.group()); 
    } 
    

Vous devez mettre le modèle dans une classe de caractères niée pour correspondre à tous les caractères sauf celui présent à l'intérieur de la classe niée.

  1. Par dédoublement.

    String s = "self-service restaurant"; 
    String parts[] = s.split("[-\\s]+"); 
    System.out.println(Arrays.toString(parts)); 
    

Ce serait diviser votre entrée en fonction d'un ou plusieurs espaces ou caractères trait d'union. Plus tard, vous pourriez les rejoindre pour obtenir votre sortie désirée.

  1. En remplaçant.

    String s = "self-service restaurant"; 
    System.out.println(s.replaceAll("[-\\s]+", "\\\n"));