[Javalist] RegExp probléma: nem aposztrófok közé zártak felismerése

József Keresztes xesj.hu at gmail.com
2013. Dec. 1., V, 17:42:58 CET


Sziasztok !

Megnéztem és mivel úgy kb. 300 ember van ezen a levelezőlistán, ennyi
embernek kell hogy legyen frappáns ötlete egy látszólag
egyszerű probléma megoldására. A problémát már régebben is felvetettem, de
akkor nem született igazi megoldás,
és mivel én sem oldottam meg azóta (mert nem elég elegánsak a megoldások),
újra próbálkozom.

Arról van szó hogy egy SQL stringben kettősponttal jelöljük a paramétereket
például:

String originalSql = "select * from telepules where kod = :x";

Mivel a JDBC-ben nincs ":x" ezért "?" -re kell alakítani. Erre a megoldás
egyszerű, régen alkalmazom a következő kódot:

Matcher matcher = Pattern.compile(":[a-z_0-9]+",
Pattern.CASE_INSENSITIVE).matcher(originalSql);

majd a matcher.find() -dal mindent meg lehet oldani, a "?"-es cserét stb.

Azonban a probléma jelentkezik például egy ilyen sql-nél:

String originalSql = "select to_char(datum,'hh24:mi:ss') from telepules
where kod = :x";

Sajnos az előző pattern-es megoldás nem tudja figyelembe venni hogy
aposztrófok között van a :mi és a :ss ezeknek nem kellene megfelelni
a feltételeknek, csak a :x -nek, csak az utóbbit kellene ?-re cserélni.

Szóval számomra az lenne az elfogadható frappáns megoldás ha ezt kizárólag
a regexp kifejezés átírásával lehetne megoldani.

Ha van erre valakinek megoldása azt szívesen fogadnám.

Joe
--------- következő rész ---------
Egy csatolt HTML állomány át lett konvertálva...
URL: <http://lists.javaforum.hu/pipermail/javalist/attachments/20131201/02b7c6f1/attachment.html>


További információk a(z) Javalist levelezőlistáról