发布于2022-06-23 18:47 阅读(986) 评论(0) 点赞(19) 收藏(3)
我有一个函数,它每次返回一个不同的字符串,但具有特定的随机模式,这种模式可以像“a、b、c、a、b、c ”或更复杂的东西一样简单。
所以我需要编写一个函数,在字符串中搜索模式并返回它。
只有一个条件需要考虑,假设我们有这个字符串,例如:“a,b,a,b,c,a,b,a,b,c”
在该字符串中,您不能说“a,b”是一种模式,要将特定字符串视为一种模式,那么它应该比剩余的字符串长,在这种情况下,“a,b”是(2位* 2) = 4 剩下的是“c,a,b,a,b,c”6 位数字,所以认为真正的模式是“a,b,a,b,c”。
我打算编写一个函数来做到这一点,但我知道这将是一个复杂的函数,所以我想先问一下,PHP 或 Javascript 中是否有内置功能可以做一些接近的事情或完成这项工作对我来说更容易,所以有什么想法吗?
您可以使用正则表达式执行此操作:^([a-z]{2,})(?:\1)+$
。正则表达式使用递归模式来匹配任何具有重复模式的字符串,将模式放在第一组中。这是如何在 PHP 中使用它:
编辑
正则表达式已更新,以允许末尾不完整的模式(只要有一个重复),然后检查它的长度是否与模式匹配,以允许匹配字符串,例如abcabca
.
function check_match($string) {
if (preg_match('/^([a-z]{2,})(?:\1)+(.*)$/', $string, $matches)) {
return strlen($matches[2]) == 0 || $matches[2] == substr($matches[1], 0, strlen($matches[2])) ? $matches[1] : false;
}
return false;
}
foreach (array("abca", "abcabcab", "abcabcabcabc", "ababcababc", "aabbaabb", "aabaab", "aabaabd", "abcd", "aabcaabc", "abcabca") as $str) {
if ($pattern = check_match($str))
echo "$str matched $pattern\n";
else
echo "no pattern for $str\n";
}
输出:
no pattern for abca
abcabcab matched abc
abcabcabcabc matched abcabc
ababcababc matched ababc
aabbaabb matched aabb
aabaab matched aab
no pattern for aabaabd
no pattern for abcd
aabcaabc matched aabc
abcabca matched abc
作者:黑洞官方问答小能手
链接:http://www.phpheidong.com/blog/article/349987/fcdc469e7abe56df9459/
来源:php黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 php黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-4
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!