Регулярное выражение для поиска двузначных чисел в случайной строке в C
Итак, вот что я хочу сделать: предположим, у нас есть файл.txt со строками случайных символов внутри каждой строки. Мне нужно печатать только те строки, которые содержат точно двузначные числа, как так: *
- (любой нецифровый символ или ничего) [1-9] [0-9] (любой нецифровый символ или ничего)
Я думал об использовании регулярных выражений, что-то вроде этого.
bool teststuff(char* line)
{
int comp;
regex_t myregex;
// Compile the regular expression
comp = regcomp(&myregex, "[^0-9]?[1-9][0-9][^0-9]?", REG_EXTENDED | REG_NOSUB) ;
//([^0-9][1-9][0-9][^0-9])
// Compare line to the regex
return 0 == regexec(&myregex, line, NULL , NULL , NULL) ? true : false;
}
И это работает до такой степени, без фильтрации тривиальных строк, таких как:
2333333|; ²³~ @`1´ ©«» ¤¼× {3} abc def ghi jkl mno pqrs tuv wxyz ABC DEF GHI JKL MNO PQRS TUV WXYZ !
или же
12123asdas
Я все еще изучаю C, поэтому любой совет будет оценен!
1 ответ
Решение
Вы можете использовать
"(^|[^0-9])[1-9][0-9]($|[^0-9])"
Он находит двузначное число без начального нуля, которое не заключено в другие цифры.
Детали шаблона
(^|[^0-9])
- начало строки (^
) или любой нецифровый символ ([^0-9]
)[1-9]
- цифра от1
в9
[0-9]
- любая цифра ASCII($|[^0-9])
- конец строки ($
) или любой нецифровый символ ([^0-9]
)