Problemi con Regular Expression

lunedì 07 maggio 2012 - 12.57

celedrummer Profilo | Newbie

Buongiorno a tutti,
mi presento: sono Adriano di Verona e sviluppo in c# e sql.

Ho un grosso problema con le reg exp in SQL (spero che questa sia la sezione giusta!).

Ho bisogno di ricercare tutte le frasi che NON terminano con certe parole.

Mi spiego meglio.
Assumiamo che le parole che non devono comparire in fondo alla frase siano 'va' e 'sta'.

Quindi, l'input 'ciao adriano come andiamo' deve matchare, così come 'ciao adriano': non deve matchare invece 'ciao adriano come va'.

Mi potete aiutare?
Sto impazzendo!!

Grazie!! :)

boccia75 Profilo | Junior Member

Ciao!
Di primo acchito ti direi di inserire la condizione

WHERE LTRIM(RIGHT(CAMPO,3)) NOT IN ('va','sta')

Questa condizione ti estrae solo ri record che non terminano con va e sta.

Ciao.

celedrummer Profilo | Newbie

Intanto Grazie della cellare risposta, Boccia75! :)

Ovviamente mi sono spiegato di fretta e male (chiedo scusa di ciò): io intendevo fare questa cosa tramite le RegularExpression, non tramite SQL.

Una cosa del tipo:
ciao(\s*\w*\s*)*(?=ehi)

dovrebbe matchare con tutte le frasi che iniziano con 'ciao' e teminano con 'ehi' e contengono parole e spazi.. ma non funzia!!

grazie..

lbenaglia Profilo | Guru

>Ho bisogno di ricercare tutte le frasi che NON terminano con
>certe parole.
>
>Mi spiego meglio.
>Assumiamo che le parole che non devono comparire in fondo alla
>frase siano 'va' e 'sta'.
>
>Quindi, l'input 'ciao adriano come andiamo' deve matchare, così
>come 'ciao adriano': non deve matchare invece 'ciao adriano come
>va'.
>
>Mi potete aiutare?

Ciao Adriano,

In SQL Server l'operatore T-SQL che si avvicina di più alle RegExp è il LIKE.
Osserva il seguente esempio:

USE tempdb; CREATE TABLE dbo.foo( c varchar(30) NOT NULL ); INSERT dbo.foo VALUES ('ciao adriano come andiamo') , ('ciao adriano') , ('ciao adriano come va'); SELECT * FROM dbo.foo WHERE NOT( c LIKE '%va' OR c LIKE '%sta'); /* Output: c ------------------------------ ciao adriano come andiamo ciao adriano (2 row(s) affected) */ DROP TABLE dbo.foo;

A partire da SQL Server 2005 puoi sempre scrivere una funzione CLR che potrai richiamare nelle tue query T-SQL:
http://www.codeproject.com/Articles/42764/Regular-Expressions-in-MS-SQL-Server-2005-2008

>Grazie!! :)
Prego.

Ciao!
--
Lorenzo Benaglia
http://blogs.dotnethell.it/lorenzo/

celedrummer Profilo | Newbie

Grazie anche a te Lorenzo, ma SQL non centra niente (l'ho tirato in ballo per errore), a me interessa la funzio0nalità e quindi la sintassi delle regular expression.
Provo a riformulare la domanda.

Date le seguenti due stringhe:
"ENERGIA ELETTRICA ATTIVA CORRISPETTIVO ENERGIA PER FORNITURE CON POTENZA IMPEGNATA OLTRE 3 SINO A 6"
e
"ENERGIA ELETTRICA ATTIVA CORRISPETTIVO ENERGIA PER FORNITURE CON POTENZA IMPEGNATA OLTRE 3 SINO A 6 KW (A4)"

mi interessa trovare una RegExp che mi prenda la prima scartando la seconda: ovvero deve far matchare ciascuna descrittiva che NON riporti in fondo un codice del tipo 'A4' o altri tipo 'A2'.

Sapete aiutarmi? .....
Grazie ancora.

lbenaglia Profilo | Guru

>Grazie anche a te Lorenzo, ma SQL non centra niente (l'ho tirato
>in ballo per errore), a me interessa la funzio0nalità e quindi
>la sintassi delle regular expression.

Ciao,

Allora ti suggerisco di postare in una stanza più adeguata dato che qui sei off topic.

Ciao!
--
Lorenzo Benaglia
http://blogs.dotnethell.it/lorenzo/

celedrummer Profilo | Newbie

Ehmmm non so quale!!
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5