정규식 질문 드립니다
글쓴이: chunj101 / 작성시간: 월, 2022/01/10 - 11:04오전
안녕하세요.
정규식으로 유효성 검사를 하고 싶은데 잘 되지 않아 질문드립니다.
GRANT xxxx; REVOKE xxxx; ALTER TABLE xxxx; ALTER USER xxxx; DROP USER xxxx; GRANT xxxx;
입력값은 위와 같은 형식으로 받을수 있구요. 구분자는 세미콜론(;) 입니다.
위 입력에서 GRANT, REVOKE, ALTER USER, DROP USER만 허용 가능한 패턴이고 ALTER TABLE 같이 허용 가능 외 패턴이 입력되는 것을 필터링 하고 싶습니다.
입력에 따라 xxx ; 처럼 세미콜론 이전에 공백이 추가될수도 있고 xxx; REVOKE 처럼 세미콜론 이후 공백이 2개 이상일 수도 있습니다.
GRANT ~; REVOKE ~; ALTER USER ~; DROP USER ~; 이렇게 제가 정한 허용 가능한 규칙을 입력 받은 값에서 구분자 구분에 따라 처음부터 마지막까지 유효성 검사를 하고 싶습니다.
제가 했을때는 GRANT ~ 마지막 세미콜론 까지 선택되어 구분자마다 패턴 분석을 하지 못해서 질문 드리게 되었습니다.
Forums:
구분자가 ; 세미콜론이면 다음과 같이 해보세요
구분자가 ; 세미콜론이면 다음과 같이 해보세요
(ALTER TABLE 이후 처음 ; 세미콜론이 나올때까지 매칭)
ALTER TABLE[^;]+;
위 구문은 예시로 적은건데 오해의 소지가 있었던것
위 구문은 예시로 적은건데 오해의 소지가 있었던것 같네요 ^^;;
입력값이 정해져 있지 않구요. 허용된 구문은 GRANT, REVOKE, DROP USER, ALTER USER 이고 예를들어 ALTER TABLE 같은 그 외의 모든 구문은 유효성 검사 실패를 해야 해서요.
ALTER TABLE이 DROP DATABASE가 될수도 있고 입력받는대로 판별해야 합니다.
제시된 상황에서는 그냥 "ALTER TABLE"
제시된 상황에서는 그냥 "ALTER TABLE" 검색하면 되는 것 아닌가요?
네..위에 대댓글로 적은것 처럼 ALTER
네..위에 대댓글로 적은것 처럼 ALTER TABLE은 예시일 뿐이라서요. 허용된 형식만 고정입니다.
$ cat input.txt
답변 감사합니다.
답변 감사합니다.
> 마지막 세미콜론 까지 선택
> 마지막 세미콜론 까지 선택
greedy match 가 기본이라서 그렇습니다. non-greedy match 로 지정하시면 됩니다.
첫번째 익명님이 다신 댓글은,
regex 와 비슷하긴 하지만 non-greedy 지시자(지정자?)가 딱히 없는 sed 등에서도 사용할 수 있는 non-greedy 패턴입니다.
손가락을 보시지 말고 손가락이 뭘 가르키고 있는지 보세요...
답변 감사합니다.
답변 감사합니다.
댓글 달기