Мне нужно соответствовать любой из списка строк, и мне интересно, могу ли я просто использовать регулярное выражение, что-то вроде "item1|item2|item3|..."
вместо того, чтобы просто сделать отдельный strstr()
для каждой строки. Но список может быть довольно большим — до 10000 наименований. Будет ли регулярное выражение работать хорошо с этим? Будет ли это быстрее, чем искать каждую строку отдельно?
Регулярное выражение будет работать и, безусловно, будет быстрее, чем поиск по каждой строке. Хотя я не уверен, сколько памяти или времени займет начальная установка, учитывая 10000 шаблонов ввода.
Однако это общеизвестная проблема, и существует множество специфических алгоритмов, например:
и несколько других. У них у всех разные компромиссы, так что выбирайте яд.
В нашем проекте нам требовалось решение с множественной заменой, поэтому мы выбрали алгоритм Aho-Corasick и построили на нем функцию замены.
Других решений пока нет …