Domanda

Non sono un esperto di espressioni regolari, quindi ho pensato di buttare via questa domanda. Penso che le espressioni regolari possano aiutare a rendere i miei test più solidi (test delle dichiarazioni QL EJB generate per la generazione corretta).

Ad esempio:

seleziona u.firstName, u.lastName da Users u dove u.age > 50

Quale regex posso usare per dividerlo nel seguente?

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

indipendentemente dal caso delle parole chiave (ovvero SELECT, Select, select, ...) e indipendentemente dai possibili spazi prima e dopo le parole chiave? Naturalmente sarebbe ancora meglio dividerlo ulteriormente, ma se posso dividere le parti come nell'esempio sopra, posso migliorare i miei test.

Grazie in anticipo per eventuali suggerimenti e aiuto.

È stato utile?

Soluzione

La regex da dividere sarebbe qualcosa del tipo:

 select|from|where

puoi usare lo strumento lanaguage per compilare regex in modo che non sia sensibile al maiuscolo / minuscolo

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

Altri suggerimenti

La regex più semplice sarebbe qualcosa del tipo:

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

A seconda della tua lingua dovresti essere in grado di impostare flag per regex in modo che non facciano distinzione tra maiuscole e minuscole. Il risultato saranno 3 gruppi acquisiti che contengono le informazioni richieste (circondate da spazi). Sarebbe più semplice usare trim () o una funzione simile nella tua lingua per eliminare gli spazi non segnati piuttosto che rendere regex più complesso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top