匹配文本模式通过允许的字符替换放宽约束
Matching text patterns relaxing contraints with admitted character substitutions
假设我必须匹配输入文本中的某些模式。让模式成为
password
我想匹配所有与我的模式匹配的输入,但承认一组预定义的 字符替换,比如:
1. a -> @
2. e -> 3
3. o -> 0
4. i -> !
5. s -> $
继续我的示例,我希望以下所有输入都能成功匹配我的 password
模式:p@ssword
、p@$sword
、pa$$w0rd
,等等上。
我的主要问题是怎么做,但缩小范围:
- 正则表达式是正确的工具吗?
- 如何定义正则表达式匹配应考虑的承认的替换集?
- 这是我忽略的一个很常见的问题吗?
- 什么是简洁的方法(即只需定义 一次 替换,而不必为每个承认的模式重复它们)来实现多个模式?
请注意,password
只是一个 方便 的单词,其中包含几个可能的替代词;我的问题根本不想处理安全问题。
如果替换始终是单个字符(或多个选择之间的单个字符),则可以使用字符 class :
p[a@][s$][s$]w[o0]rd
如果可以是多个字符,则必须使用交替:
pass(w|\/\/)ord
您可以定义 map/dictionary 个原始字符以用您选择的语言进行可能的替换,并使用它来将输入转换为模式:
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 对您也有用。
假设我必须匹配输入文本中的某些模式。让模式成为
password
我想匹配所有与我的模式匹配的输入,但承认一组预定义的 字符替换,比如:
1. a -> @
2. e -> 3
3. o -> 0
4. i -> !
5. s -> $
继续我的示例,我希望以下所有输入都能成功匹配我的 password
模式:p@ssword
、p@$sword
、pa$$w0rd
,等等上。
我的主要问题是怎么做,但缩小范围:
- 正则表达式是正确的工具吗?
- 如何定义正则表达式匹配应考虑的承认的替换集?
- 这是我忽略的一个很常见的问题吗?
- 什么是简洁的方法(即只需定义 一次 替换,而不必为每个承认的模式重复它们)来实现多个模式?
请注意,password
只是一个 方便 的单词,其中包含几个可能的替代词;我的问题根本不想处理安全问题。
如果替换始终是单个字符(或多个选择之间的单个字符),则可以使用字符 class :
p[a@][s$][s$]w[o0]rd
如果可以是多个字符,则必须使用交替:
pass(w|\/\/)ord
您可以定义 map/dictionary 个原始字符以用您选择的语言进行可能的替换,并使用它来将输入转换为模式:
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 对您也有用。