我花了几天时间研究一个函数,以正确的顺序获取字符串数组中的常见字符,以创建通配符。
这是一个解释我的问题的例子。我做了大约3个函数,但是当每个字母的绝对位置不同时,我总是遇到一个错误。
我们假设“+”是“通配符”:
Array(
0 => '48ca135e0$5',
1 => 'b8ca136a0$5',
2 => 'c48ca13730$5',
3 => '48ca137a0$5');
应该返回:
$wildcard='+8ca13+0$5';
在这个例子中,棘手的是$array[2]
比其他多 1 个字符。
其他示例:
Array(
0 => "case1b25.occHH&FmM",
1 => "case11b25.occHH&FmM",
2 => "case12b25.occHH&FmM",
3 => "case20b25.occHH&FmM1");
应该返回:
$wildcard='case+b25.occHH&FmM+';
在这个例子中,棘手的部分是:
- 重复字符,例如“要删除”部分中的 1 -> 11,公共部分中的 c -> cc
- “要删除”部分中的 $array[2] 和 [3] 中的“2”字符不在同一位置
- 最后一个字符串末尾的“1”字符
我真的需要帮助,因为我找不到这个函数的解决方案,而它是我的应用程序的主要部分。
预先感谢,请不要犹豫提出问题,我会尽快回答。
Mykeul
似乎您想从一组示例字符串中创建类似正则表达式的内容。
一般来说,这可能相当棘手。找到这个链接,不确定是否相关:
另一方面,如果您只需要一个表示“0 个或多个字符”的特定通配符,那么它应该容易得多。编辑距离 http://en.wikipedia.org/wiki/Levenshtein_distance算法计算两个字符串之间的相似度。通常只需要结果,但在您的情况下,差异的地方很重要。您还需要针对 N 个字符串进行调整。
所以我建议学习这个算法,希望你能得到一些如何解决你的问题的想法(至少你会得到一些文本算法和动态编程的练习)。
PHP 中的继承算法:
_http://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Levenshtein_distance#PHP
您可能还想搜索“diff”的 PHP 实现。http://paulbutler.org/archives/a-simple-diff-algorithm-in-php/ http://paulbutler.org/archives/a-simple-diff-algorithm-in-php/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)