我试图弄清楚是否有一种简单的方法可以让特定的正则表达式给出除了一个字符之外的正确匹配。(如果重要的话,在 PHP 中工作)。
例如,对于模式“apples”,我不仅想找到“apples”的出现,还想找到“appxes”、“opples”、“applis”等。
有什么好的方法可以做到这一点吗?提前致谢!
使用levenshtein
函数而不是正则表达式。这是文档。
在示例echo levenshtein("abcd","abce")
中打印出:1
.
编辑:另请注意,此函数将比较不同长度的字符串,因此可能需要进行额外检查。请参阅下面的@Vulcan 评论。
我不认为正则表达式是正确的工具。你可以做这样的事情。
$temp = str_split ("apples");
$test = str_split ("appxes");
var_dump(array_diff($temp, $test));
输出:
array(1) { [3]=> string(1) "l" } // 1 mismatch
^ // position ^ //letter at mismatch
您的正则表达式字符串:
[A-z]pples|A[A-z]ples|Ap[A-z]les|Appl[A-z]es|Appl[A-z]s|Apple[A-z]
您可以将字符串溢出到 X 个字母中,然后从期望的 preg 匹配词中 preg 匹配 X-1。