Как мы узнали, учитывая шаблон регулярного выражения (например, A B A B A C
), мы можем преобразовать его в DFA. В этом примере это будет похоже на цепочку (вы можете проверить ее here).Как создать регулярное выражение, используемое для поиска шаблона, вместо проверки шаблона?
Этот «цепной» DFA может определить, соответствует ли данная строка шаблону или нет (т. Е. Принять/отклонить); Но он не может определить, есть ли какое-либо событие в строке и идентифицировать все из них.
Пример: Пусть это к Строка поиска: A B C A B A B A B A C A B C
Хотя есть явление, начиная с 6-го символа, то «цепеобразная» DFA не может сказать это. Все, что он может сделать, это отклонить эту строку.
Вопрос: Возможно ли создать регулярное выражение, поддерживающее такую функциональность?
(Примечание. Я понимаю, этот вопрос отчасти сбивает с толку, я хотел бы уточнить, что вас смущает)
Я предполагаю, что вы говорите о [«классических» регулярных выражениях] (https://en.wikipedia.org/?title=Regular_expression#Formal_definition), как изучали в теории формального языка, а не в синтаксисе соответствия регулярному выражению найденный во многих языках программирования (который является довольно далеким потомком классической нотации). –
Очевидно, что вы можете делать то, что вы просите, поскольку большинство языков программирования имеют функцию «заменить регулярное выражение», которая требует, чтобы она определяла, где произошло совпадение. Кроме того, операции «match regexp» часто возвращают результат, содержащий подстроку, которая соответствует. – Barmar
Для очень простого примера, поэтому опция '-o' для' grep' в Linux; вместо того, чтобы показывать всю строку, которая соответствует, она просто показывает часть строки, которая соответствует регулярному выражению. – Barmar