POSIX regex 라이브러리와 PCRE 라이브러리의 정규식 함수를 살펴 보았지만 두 함수 모두 문자열 교체 기능이없는 것 같습니다. 저는 C++을 사용하고 싶지 않습니다. 다른 라이브러리를 연결할 필요가 없다면 가장 좋을 것입니다.하지만 할 수는 있습니다. 수동으로 문자열 바꾸기를 수행해야합니까? 그렇다면 캡처 그룹을 어떻게 사용할 수 있습니까?순수 C에서 정규식 문자열 바꾸기를 수행하는 방법?
답변
regex.h는 문자열 대체를 기본적으로 지원하지 않지만 하위 표현식/캡처 그룹을 제공하므로 훨씬 쉽게 사용할 수 있습니다. 정규 표현식 컴파일에 익숙하고 정규 표현식 실행과 서브 표현식을 생략한다고 가정합니다. regex.h 다음과 같이
regexec는()이 정의된다 (은/usr// 등), 둘째, 최종 인수 정규식이다
extern int regexec (const regex_t *__restrict __preg,
const char *__restrict __string, size_t __nmatch,
regmatch_t __pmatch[__restrict_arr],
int __eflags);
제, 문자열과 실행 플래그 실행될 로 나타났다. 세 번째와 네 번째 인수는 regmatch_t 배열을 지정하는 데 사용됩니다. regmatch_t는 rm_so와 rm_eo라는 두 개의 필드로 구성되며, 각각 일치하는 영역의 시작과 끝의 인덱스 또는 오프셋입니다. 이 인덱스는 문자열 바꾸기를 수행하기 위해 문자열 .h의 memcpy(), memset() 및 memmove()과 함께 사용할 수 있습니다.
나는 약간의 예를 만들고 나중에 게시 할 것이다.
행운을 빌어 요, 그리고 이것이 도움이 되었기를 바랍니다.
+1 이렇게 대답하면 308 명이 넘습니다! –
* 작은 예제를 만들고 나중에 게시 할 예정입니다. * 언제? 5 년 전에이 약속을하셨습니다. ; ([여기 있습니다] (http://stackoverflow.com/questions/1085083/regular-expressions-in-c-examples) 지금까지 찾은 몇 가지 예제 –
PCRE 라이브러리 자체는 바꾸기 기능을 제공하지 않지만 perl 스타일 =~ s/pattern/replace/
구문을 허용하는 PCRE 다운로드 페이지에서 사용할 수있는 래퍼 기능이 있으며 PCRE 기본 기능을 사용하여 대체/바꾸기를 수행합니다. http://www.pcre.org/으로 이동하여 다운로드 링크 ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/을 클릭 한 다음 Contrib 디렉토리를 클릭하십시오. 원하는 패키지/프로젝트는 pcrs-0.0.3-src.tar.gz
입니다.
나는이 문서를 사용하지 않았으므로 문서가 얼마나 잘 작동하는지 증언 할 수 없다. 그러나 코드는 상당히 작고 단순한 코드이므로 목적을 잘 수행 할 수 있습니다.
안녕하세요, 링크 주셔서 감사합니다.하지만 어떻게합니까? 내 프로그램에서 pcrs를 사용합니까? 나는 현재 pcre_compile 및 pcre_exec 함수를 사용합니다. http://stackoverflow.com/a/1421923/1729501 – user13107
- 1. Javascript 특정 규칙이 적용된 하위 문자열 전역 바꾸기를 수행하는 방법
- 2. c에서 hex8 인코딩을 수행하는 방법?
- 3. C에서 회전 교대를 수행하는 방법
- 4. C에서 정규식 camelcase #
- 5. 선택한 텍스트에서 메모장을 사용하여 찾기/바꾸기를 수행하는 방법 ++
- 6. c에서 문자 배열을 문자열로 변환하여 문자열 연산을 수행하는 방법은 무엇입니까?
- 7. C에서 문자열 정규식을 일치시키는 방법 + +
- 8. 파이썬 검색 및 바꾸기가 문자열 바꾸기를 복제합니까?
- 9. 문자열 바꾸기를 사용하여 정규식에 변수를 전달하십시오.
- 10. PowerShell 함수에서 문자열 바꾸기를 수행하려면 어떻게해야합니까?
- 11. 언제 sprintf를 통해 문자열 바꾸기를 사용해야합니까?
- 12. 정규식 문자열
- 13. 정규식 : 문자열
- 14. 정규식 문자열
- 15. C에서 정규식 표현
- 16. C에서 Wikicode를 파싱하기위한 정규식
- 17. C에서 변환을 수행하는 Pdf #
- 18. C에서 64 비트 쓰기를 수행하는 방법?
- 19. Objective-C에서 이미지 뺄셈을 수행하는 방법
- 20. 객관적인 C에서 nsarray의 필터링을 수행하는 방법
- 21. 객관적인 C에서 게으른 인스턴스 생성을 수행하는 방법?
- 22. C에서 조건부 함수 호출을 수행하는 방법?
- 23. 문자열 대체 정규식
- 24. 순수 액티브 레코드 (레일)로이 sql을 수행하는 방법
- 25. 정규식 일치하는 문자열 또는 문자열
- 26. C에서 문자열 변환 테이블 구현
- 27. vgenet에서 정규식 검색/바꾸기를 할 수 있습니까? vs.net에서
- 28. 일련의 문자열 바꾸기를 수행하고 쉽게 취소 할 수있는 방법은 무엇입니까?
- 29. C에서 스크램블 해제 문자열
- 30. 순수 스칼라 코드를 저장하는 방법
어떤 캡처 그룹을 언급하고 있습니까? regex에 내장 된 C 라이브러리가 없기 때문에 pcre 또는 somithing을 사용해야합니다. – lvella
일반적으로 C 문자열 내에 문자열 바꾸기를 수행 할 수 없습니다. 사용 가능한 메모리가 없을 수 있습니다. 정확히 무엇을하려고하는지 명확히 할 수 있습니까? –
그럼 내가 구체적으로하고 싶니? 내가 변경하고 서버에 전달하는 정규식을 사용하려는 HTTP 요청 헤더가 있습니다. – Yifan