我使用 T-Rex 正则表达式库将输入的字符串验证为以下正则表达式
(“(([A-PR-UWYZ][A-HK-Y]{0,1}[0-9]{1,2}[ABCEHMNPRTVWXY]{0,1}|GIR)\s{0,2}([0-9][ABD-HJLN-UW-Z]{2}))”)
"A11AA"
但是应该传递这样的字符串会失败。你可以帮帮我吗 ?
您可以在http://sourceforge.net/projects/tiny-rex/中找到 T-Rex 源代码。
我使用 T-Rex 正则表达式库将输入的字符串验证为以下正则表达式
(“(([A-PR-UWYZ][A-HK-Y]{0,1}[0-9]{1,2}[ABCEHMNPRTVWXY]{0,1}|GIR)\s{0,2}([0-9][ABD-HJLN-UW-Z]{2}))”)
"A11AA"
但是应该传递这样的字符串会失败。你可以帮帮我吗 ?
您可以在http://sourceforge.net/projects/tiny-rex/中找到 T-Rex 源代码。
一个猜测,出乎意料:
#include "trex.h"
#include <stdio.h>
#include <string.h>
#ifdef _UNICODE
#define trex_sprintf swprintf
#else
#define trex_sprintf sprintf
#endif
int main(int argc, char* argv[])
{
const TRexChar *begin,*end;
TRexChar sTemp[200];
const TRexChar *error = NULL;
TRex *x = trex_compile(_TREXC(
"("
"("
"("
"[A-P]|[R-U]|[WYZ]"
")"
"("
"[A-H]|[K-Y]"
")?"
"[0-9]{1,2}"
"([ABCEHMNPRTVWXY]?|GIR)"
")"
"\\s{0,2}"
"("
"[0-9]"
"("
"[AB]|[D-H]|[JL]|[N-U]|[W-Z]"
"){2}"
")"
")"),&error);
if(x) {
trex_sprintf(sTemp,_TREXC("A11AA"));
if(trex_search(x,sTemp,&begin,&end))
{
int i,n = trex_getsubexpcount(x);
TRexMatch match;
for(i = 0; i < n; i++)
{
TRexChar t[200];
trex_getsubexp(x,i,&match);
trex_sprintf(t,_TREXC("[%%d]%%.%ds\n"),match.len);
trex_printf(t,i,match.begin);
}
trex_printf(_TREXC("match! %d sub matches\n"),trex_getsubexpcount(x));
}
else {
trex_printf(_TREXC("no match!\n"));
}
trex_free(x);
}
else {
trex_printf(_TREXC("compilation error [%s]!\n"),error?error:_TREXC("undefined"));
}
return 0;
}
通常,在调用“Bug!”之前,您必须检查三次。在编译器、库或其他工具上(开发人员大概知道他们在做什么,并测试他们的东西)。此外,你可能会在公共场合让自己难堪 ;-)
AFAICS,您的“A11AA”字符串与给定的表达式不匹配,之后需要一些进一步的东西。
尝试更简单的表达式,匹配字符串的一部分并进行处理。检查表达式的确切含义(不同工具的语言完全不同)。