На моем компьютере с OS X 10.5.8, используя функции regcomp и regexec C для соответствия расширенному регулярному выражению "(() | abc) xyz", я нахожу совпадение для строки "abcxyz", но только от смещения 3 до смещение 6. Я ожидал, что вся строка будет сопоставлена, и я увижу субматч для начальной части строки «abc».
Когда я пытаюсь использовать тот же шаблон и текст с awk на той же машине, он показывает совпадение для всей строки, как я и ожидал.
Я ожидаю, что мой ограниченный опыт работы с регулярными выражениями может быть проблемой. Может кто-нибудь объяснить, что происходит? Является ли мое регулярное выражение допустимым? Если так, то почему он не совпадает со всей строкой?
Я понимаю, что "((abc) {0,1}) xyz" можно использовать в качестве альтернативы, но интересующий образец автоматически генерируется из другого формата шаблона, и исключение случаев "()" является дополнительной работой Я хотел бы избежать, если это возможно.
Для справки, флаги, которые я передаю regcomp, состоят только из REG_EXTENDED. Я передаю пустой набор флагов (0) в regexec.