2009-07-13 16 views
0

나는이 같은 SQLite는에서 문 쿼리를 만들 복용하고 있습니다 :SQLite는 자동 증가 정규식

/\b\[?id\]?\s+INTEGER\s+PRIMARY\s+KEY\s+AUTOINCREMENT\b/Ui 
이 같은 정규 표현식으로 자동 증가 필드를
SELECT sql FROM sqlite_master WHERE type = 'table' AND name = :table 

을 사용하여 결정 만든

CREATE TABLE [users] ([id] INTEGER PRIMARY KEY AUTOINCREMENT, [username] VARCHAR, [password] VARCHAR, [default_project] VARCHAR) 

와 같은 키워드를 작성하는 데 허용되는 여러 가지 방법이 있습니다., `id`, 'id'.

$pattern = "/\b\"(id)|(\"id\")|(\[id\])|(`id`)|('id')\"\s+INTEGER\s+PRIMARY\s+KEY\s+AUTOINCREMENT\b/Ui"; 

그러나있는 몇 가지 문제가 있습니다 : 여기에 표시된 http://www.sqlite.org/lang_keywords.html

나는 다른 사람들 나는이에 입수했습니다의 도움으로 ... 명시 적으로 이러한 다양한 변화를 체크하는 정규 표현식을 만들고 싶었 이 ... 하나는 INTEGER PRIMARY KEY AUTOINCREMENT이 더 이상 확인되지 않고 ... ('id')이 제대로 일치하지 않는 것입니다 ... 그러나 내가 그 자리를 ("id")으로 바꾸려면 ... ("id") wouldn '티.

답변

0
/(\"id\"|\[id\]|\'id\'|`id`|\\bid)\s+INTEGER\s+PRIMARY\s+KEY\s+AUTOINCREMENT/Ui 

은 의도 한대로 작동하는 것 같습니다.

0

[id][id]하지만 id 일치하지 않는, 당신을 위해 무엇을 검색하는 것은 아마도 :

$pattern = "/\s(\"[a-z]+\"|\[[a-z]+\]|'[a-z]+'|[a-z]+)\s+INTEGER\s+PRIMARY\s+KEY\s+AUTOINCREMENT/Ui"; 

당신이 어떤 알파벳 필드 이름과 일치 다음 첫 번째에서 찾을 수 있도록 [a-z]+를 사용하여 (AUTOINCREMENT 키워드를 사용하지 않는 ROWID도있을 수 있습니다 (두 문자 모두 유효하지만 한글은 slightly different meaning입니다).