Регулярное выражение находит пропущенную букву в слове

#regex

#регулярное выражение

Вопрос:

Я хочу найти слово, даже если это слово написано с пропущенной буквой.

Например, я хочу найти

ссылки

Я также хочу найти ссылки или ссылки, но не ссылаться

Я пишу это регулярное выражение

 (brefe?r?e?n?c?e?s?b)
  

И я хочу добавить проверку длины соответствующей группы, эта группа должна быть больше 8.
Могу ли я использовать только методы регулярных выражений?

Комментарии:

1. Пожалуйста, всегда добавляйте язык в вопросы с регулярными выражениями. Существует много разных вариантов регулярных выражений, и, вероятно, существуют другие решения вашей проблемы на этом конкретном языке.

Ответ №1:

Я не думаю, что regex — хороший инструмент для поиска похожих слов, как вы пытаетесь. Что вы делаете, если две буквы меняются местами, например, «refernece»? Ваше регулярное выражение не найдет ее.

Но чтобы показать способ проверки длины в регулярных выражениях, вы могли бы сделать это, используя предварительный просмотр, подобный этому

 (b(?=.{8,}b)refe?r?e?n?c?e?s?b)
  

(?=.{8,}b) Будет проверяться, составляет ли длина от первого b до следующего b не менее 8 символов ( {8,} )

Смотрите это здесь, в Regexr

Ответ №2:

Я думаю, что использование регулярных выражений — не очень хорошая идея. Вам нужно больше функций питания. Например, если вы программируете на php, вам нужна функция like similar_text . Более подробная информация здесь: http://www.php.net/manual/en/function.similar-text.php

Ответ №3:

По сути, вы спрашиваете об этом (в псевдокоде):

 input == "references" or (levenshtein("references", input)==1 and length(input) == (lenght("references")-1))
  

Расстояние Левенштейна определяется как минимальное количество правок, необходимых для преобразования одной строки в другую, при этом допустимыми операциями редактирования являются вставка, удаление или замена одного символа.

Поскольку вы хотите обнаружить только строки, в которых был пропущен символ, вы должны добавить ограничение на длину строки.