匹配的文本模式放宽与承认的字符替换的约束

时间:2017-01-12 10:24:23

标签: regex text language-agnostic

假设我要匹配输入文本中的某些模式。让模式

password

我希望匹配与我的模式匹配的所有输入,但允许一组预定义的字符替换,例如:

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

保持我的榜样,我希望以下所有输入能够与我的password模式成功匹配:p@sswordp@$swordpa$$w0rd等等上。

我的主要问题是如何做到,但缩小范围:

  1. 是正确的正确的工具吗?
  2. 如何定义正则表达式匹配应考虑的已承认的替换
  3. 这是一个我忽略的非常常见的问题吗?
  4. 什么是简洁的方式(即只是定义一次替换,而不必为每个允许的模式重复它们)来实现多个模式?
  5. 请注意,password只是一个方便的字,其中包含多个可能的替代字词;我的问题根本不想处理安全问题。

1 个答案:

答案 0 :(得分:1)

如果替换始终是单个字符(或多个选项之间的单个字符),则可以使用字符类:

p[a@][s$][s$]w[o0]rd

如果它可以是多个字符,则必须使用替换:

pass(w|\/\/)ord

您可以使用您选择的语言将原始字符的地图/字典定义为可能的替换,并使用它将输入转换为模式:

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

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

我认为正则表达式可以成为一个很好的工具,但是现有的工具可以测试密码的强度,如果这是你正在寻找的东西。他们解释了常见的替代品。

如果您想禁止人们重复使用密码,也许使用Levenshtein's distance也会对您有用。