LINUX.ORG.RU

Проблемы с regex.h

 ,


0

1

Пытаюсь разбить строку на токены, выцепить числа, строки и т д, использую regex.h. Ф-ция

regexec(&(tok_regex[i].regex), str, 1, match, 0) 
записывает в match->rm_so номер, соответствующий первому элементу совпавшей строки, в match->rm_eo — оконечному. Для всех необходимых регулярок оно возвращает ожидаемые значения, а вот для строки
"^[A-Za-z]+"
возвращает match->rm_so = 0, match->rm_eo = 0. Так же не должно быть, как вытащить строку?

Полный листинг:

http://pastebin.com/E2J9Ndjc

http://pastebin.com/wXPXrDXj

★★★

Ответ на: комментарий от beastie

Да я потом перепишу на lex, но сейчас у меня уже есть прототип лексического анализатора на питоне (он достаточно простой, потому быстрее было написать его руками), хотел просто переписать на си, заодно разобраться в сишных регулярках, но регулярки отказываются работать, или работают как-то не так.

Например для строки

12.1+12i blablabla

и регулярки

"^(\\-)?[0-9]*\\.?[0-9]*((\\+|\\-)[0-9]*\\.?[0-9]*i)?"

match->rm_so = 0, match->rm_eo = 8.

А для

blablabla 12.1+12i

и

"^[A-Za-z]+"

match->rm_so = 0, match->rm_eo = 0.

Есть идеи, почему так?

Freyr69 ★★★
() автор топика
Последнее исправление: Freyr69 (всего исправлений: 1)
Ответ на: комментарий от Freyr69

На вскидку:

"^([A-Za-z]+)"

PS: пиши сразу на lex/yacc. Это в мульён раз проще и производительней, чем переписывать лапшу на regex.

beastie ★★★★★
()
Последнее исправление: beastie (всего исправлений: 1)
Ответ на: комментарий от beastie

Ага, спасибо, перепишу сразу, да, нашел и косяк.

Freyr69 ★★★
() автор топика
Ответ на: комментарий от anonymous

Я парсю HTML регулярками и ничего!

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.