2017-01-12 7 views
0

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

password 

Я хочу, чтобы соответствовать все входы, которые соответствуют с моим рисунком, но допускающие предопределенный набор символов подстановки, скажем:

1. a -> @ 
2. e -> 3 
3. o -> 0 
4. i -> ! 
5. s -> $ 

Оставаясь мой пример, я хотел бы все следующие входы, которые будут успешно сопоставлены с моим рисунком password: [email protected], [email protected]$sword, pa$$w0rd и т. д.

Мой основной вопрос как сделать это, но ограничить его вниз:

  1. является регулярное выражение в право инструмент, чтобы сделать это?
  2. как я могу определить допущенный набор замещений, который должен учитывать соответствие регулярному выражению?
  3. Это довольно распространенный вопрос, который я забыл?
  4. Что представляет собой сжатый способ (т. Е. Только определение после замен, без необходимости повторять их для каждого допущенного шаблона) для достижения этого для нескольких шаблонов?

Обратите внимание, что password был просто удобно слово, содержащее несколько возможных замен; моя проблема вообще не хочет иметь дело с безопасностью.

ответ

1

Если замена всегда один символ (или один одиночные символов между множеством вариантами), вы можете использовать класс символов:

p[[email protected]][s$][s$]w[o0]rd 

Если это может быть несколько символов, вы должны использовать чередования:

pass(w|\/\/)ord 

Вы можете определить отображение/словарь исходных символов для возможных замен на языке по своему выбору и использовать, чтобы превратить вход в шаблон:

1. a -> [[email protected]] 
2. e -> [e3] 
3. o -> [o0] 
4. i -> [i!] 
5. s -> [s$] 
6. w -> (w|\/\/) 

password -> p[[email protected]][s$][s$](w|\/\/)[o0]rd 

Я думаю, что regex может быть хорошим инструментом для этого, но уже есть инструменты, которые будут проверять силу пароля, если это то, что вы ищете. Они учитывают общие замены.

Возможно, использование Levenshtein's distance было бы полезно для вас, если вы хотите запретить людям повторно использовать закрытый пароль.

+0

спасибо! Я только что понял, что я забыл вопрос _key_, что теперь я добавил как вопрос 4. Можете ли вы посмотреть на него, пожалуйста? –

+0

@PaoloM только что отредактировал. Это достаточно подробно? – Aaron

+0

Да, и это было не так сложно понять, теперь, когда вы заставляете меня думать об этом ...: D спасибо –

 Смежные вопросы

  • Нет связанных вопросов^_^