2009-10-27 3 views
1

Je ne suis pas un expert sur les expressions régulières, alors j'ai pensé que je poserais cette question. Je pense que les expressions régulières peuvent aider à rendre mes tests plus robustes (tester les instructions EJB QL générées pour une génération correcte).Est-il possible de tester une instruction JPA/EJB QL avec regex?

Par exemple:

select u.firstName, u.lastName from Users u where u.age > 50

Que regex dois-je utiliser pour scinder en ce qui suit?

  1. "u.firstName, u.lastName"
  2. "Utilisateurs u"
  3. "u.age> 50"

quel que soit le cas des mots-clés (c.-à-SELECT, Select , sélectionnez, ...) et indépendamment des espaces possibles avant et après les mots-clés? Bien sûr, il serait encore mieux de le diviser davantage, mais si je peux séparer des parties comme dans l'exemple ci-dessus, je peux améliorer mes tests.

Merci d'avance pour toute indication et aide.

Répondre

1

Le regex de diviser serait quelque chose comme:

select|from|where 

vous pouvez utiliser l'outil de lanaguage pour compiler regex être non sensible à la casse

//Example in java 
Pattern.compile("select|from|where",Pattern.CASE_INSENSITIVE).split("select x from y where z) 
1

Le plus regex serait quelque chose comme:

select(.*?)from(.*?)where(.*) 

En fonction de votre langue, vous devriez être en mesure de définir des drapeaux pour regex d'être cas insensible. Le résultat sera 3 groupes capturés contenant les informations requises (entourées d'espaces). Il serait plus simple d'utiliser trim() ou une fonction similaire dans votre langue pour supprimer les espaces non attribués plutôt que de rendre l'expression rationnelle plus complexe.

Questions connexes