나는 같은 문자열을했습니다이 :C의 정규 표현식 앞서 부정적인 모습
"result is abcdefg hij!klm </td"
(또는 다른 대신 ABCD의 모든 것을 ...)
나는이 만든 정규식은 다음과 같습니다
"result is ([^<]+) </td"
결과가 발견되어 잘 작동합니다. 하지만 문자열이 :
"result is not found </td"
... "찾을 수 없음"이라는 단어를 추출하지 않도록하려면 어떻게해야합니까?
음수의 미리보기 표현이 있지만 C99의 regex.h에서는 작동하지 않는다는 것을 알고있었습니다.
"(?!not found)"
-> 나쁜 정규식"([^n][^o][^t][^ ][^f]..)"
-> 예를 들어, "지금"일치하지 않는"(([^<]+)&(!not found))"
-> 나쁜 정규식
(거기에는 '&'연산자 없다 , 나는 해결책이 다음과 같을 것이라고 생각한다 : a&&b == !a||!b
)
--EDIT--
여기에서는 정규식을 계산하는 코드의 일부입니다.
pmatch=malloc(nmatch*sizeof(regmatch_t));
printf("regex: %s\n",patrn);
if (regcomp(&rgT,patrn,REG_EXTENDED | REG_NEWLINE) != 0)
{
snprintf(globals.err_buff,MAX_BUFF,"bad regex: \"%s\"",patrn);
w_report_error(globals.err_buff,__FILE__,__LINE__,__func__,0,0,error);
return EXIT_FAILURE;
}
- 편집 -
어쩌면 내가 해결책을 발견 :
내 자신의 정규식 기능은 그것을 숫자 매개 변수로> 0을 전달하면 N 번째의 역 참조를 반환, 그래서 ...
참고 :
./regex
은 argv [...]를 내 자신의 라이브러리의 w_regexp로 리디렉션하는 C 프로그램 일뿐입니다.
$ ./regex "result is crack </td" 'result is (not found) </td|result is ([^<]+) </td' 3
regex: result is (not found) </td|result is ([^<]+) </td
"crack"
""
"result is crack </td"
$ ./regex "result is not found </td" 'result is (not found) </td|result is ([^<]+) </td' 3
regex: result is (not found) </td|result is ([^<]+) </td
""
"not found"
"result is not found </td"
그래서, 나는 그 AA 해결책이 될 수있는 데이터를 추출하는 데 사용할 역 참조의 인덱스를 의미 내 구조체에 번호를 추가 생각하지만, 난 또 다른 일이에 더 나은 방법을 기다리고 있습니다 또는 2.
미리 감사드립니다.
- EDIT-- (너무 많은 시간 :))
작동합니다! 나는 추종자를 피하고자하는 문자열을 '|' 정확한 문자열을위한 패턴.
이것은 정규식입니다.
"result is not found </td|result is ([^<]+) </td"
다시 한 번 감사드립니다.
나쁜 정규식 .... 나는 look-ahead가 C99 regex.h에서 지원되지 않는다고 생각한다. –