2013-08-15 1 views
1

내 프로그램에서 관리자는 템플릿 문서의 일부로 특정 문자열 형식을 정의해야합니다. 정규 표현식을 포함 할 수도 있고, 리터럴 문자열 일 수도 있습니다.사용자 입력 문자열에 정규식이 포함되어 있는지 테스트

리터럴 문자열 인 경우 문서의 모든 인스턴스에 대해 자동으로 문자열을 복사하고 싶지만 (PERL) 정규식 인 경우 사용자에게 올바른 문자열을 입력하라는 메시지를 표시하려고합니다. 이 부분은 정규 표현식을 이해하지 못하는 하위 사용자 (관리자가 아닌 사용자)가 실행하므로 기본값으로 채워지는 기본값으로 제시하고 싶지 않습니다.

현재 내가 검색하고 있습니다. 문자열 람을 통해 루프에서 간단한 전화를 통해 정규 표현식 문자 :

if (strchr ("\\^.$({[+-?*|", cInputP [ iLoop ]) != NULL) { 
    bRet = TRUE; 
    break; } 

그러나이 우아하고 구문 실수하는 경향이 보인다. 이 작업을 수행 할 PCRE에 기존 기능이 있습니까? pcre_study() 함수는이 작업을 수행하지 않는 것으로 보이며 pcre_compile()에서이 정보를 얻는 방법도 알 수 없습니다.

이상 적으로 문자열을 리터럴 하위 문자열 및 사용자 입력 하위 문자열의 구성 요소로 나눌 수도 있으므로 대체 문자열이 알려진 필수 문자로 미리 채워질 수 있습니다. regexes를 포함합니다. PCRE 라이브러리를 그대로 사용할 수 있습니까? 아니면 자체 코드로 확장해야합니까?

+0

[pcretest] (http://www.manpagez.com/man/1/pcretest/)는 어떨까요? – HamZa

+1

HamZA가 올바른 경로에 있다고 생각하면 디버그 출력에 필요한 정보가 일부 표시되는 것 같습니다. 나는 마술이 어떻게 일어나는지를보기 위해 근원을 걸어 다닐 필요가 있다고 생각한다. – Piers

답변

2

귀하의 요구 사항은 약간의 분열을 의미하기 때문에 다소 혼란 스럽습니다. 실제로 모든 문자열은 정규 표현식이며, 스스로 일치합니다 (물론 잘못된 정규 표현식을 포함하는 문자열을 제외하고).

문자열이 "리터럴 문자열 또는 정규 표현식"인지 검색하려고하면 약간 이상합니다.

리터럴 문자열이 충분한 지 또는 정규 표현식이 필요한지를 사용자가 명시 적으로 프로그램에 알려주는 것이 더 좋을 수 있습니다.

+0

내가 자동으로 교체를 할 수 있는지 여부를 알아야하기 때문에 "거짓 구분"이 필요하다. 예를 들어 사용자가 입력 한 문자열이 "150kV"이면 자동으로 대체 할 수 있습니다. 그러나 "[[: digit :]] + kV"이면 대체 문자열에 대한 추가 사용자 입력이 필요하지 않습니다. – Piers

관련 문제