Regex zum Parsen der SQL-Parameter
Wenn ich eine Abfrage wie SELECT * from authors where name = @name_param
, gibt es eine regex zu analysieren, die parameter-Namen (speziell die "name_param")?
Dank
- Nicht sicher genau das, was Sie gefragt haben. Können Sie das klären, oder ein Beispiel geben? Wollen Sie eine Liste mit den Namen und haben es konvertieren der WHERE name in (name_a, name_b, ...) ? und müssen Sie die RDBMS -, Regex-Unterstützung unterscheidet sich zwischen Ihnen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist schwierig, da params können auch auftreten, innerhalb von Zeichenfolgen.
Wie würde der reguläre Ausdruck wissen, der den ersten
@name_param
aber nicht die zweite?Es ist ein problem, das gelöst werden kann, aber es ist nicht praktisch, es zu tun in einem einzigen regulären Ausdruck. Ich hatte, um dieses in Zend_Db, und was ich Tat, war der erste Streifen aus alle Zeichenfolgen in Anführungszeichen und begrenzte Bezeichner, und dann können Sie reguläre Ausdrücke verwenden auf den Rest.
Sehen Sie den code, weil es open-source.
Siehe Funktionen
_stripQuoted()
und_parseParameters()
.https://github.com/zendframework/zf1/blob/136735e776f520b081cd374012852cb88cef9a88/library/Zend/Db/Statement.php#L200
https://github.com/zendframework/zf1/blob/136735e776f520b081cd374012852cb88cef9a88/library/Zend/Db/Statement.php#L140
Gegeben, Sie haben keine Zeichenfolgen oder Kommentare mit Parametern in Ihnen, die benötigten regex wäre ganz trivial:
Gehe ich mit Bill Karwin Empfehlung, vorsichtig zu sein, zu wissen, dass der naive Ansatz hat seine Tücken. Aber wenn Sie kow die Daten, die Sie beschäftigen, diese regex würde alles, was Sie brauchen.
@([a-zA-Z][a-zA-Z0-9_]*)
.