如何使用正则表达式解二元方程式
小编给大家分享一下如何使用正则表达式解二元方程式,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
创新互联公司专注于南通企业网站建设,成都响应式网站建设公司,商城开发。南通网站建设公司,为南通等地区提供建站服务。全流程按需网站设计,专业设计,全程项目跟踪,创新互联公司专业和态度为您提供的服务
我照着原文写出的正则还真的计算出了结果。上php例子:
/**
* 计算 Ax+By=C
*/
function suan($A, $B, $C) {
$A--;
$B--;
$str = str_repeat('-', $C);
$search = '/^(.*)\1{' . $A . '}(.*)\2{' . $B . '}$/';
preg_match($search, $str, $r);
return array('x' => strlen($r[1]), 'y' => strlen($r[2]));
}
$A = 2;
$B = 3;
$C = 9;
$r = suan($A, $B, $C);
// 测试
echo '计算' . $A . 'x+' . $B . 'y=' . $C . '
';
echo 'x=' . ($r[x]) . '
';
echo 'y=' . ($r[y]);
// 输出
// 计算2x+3y=9
// x=3
// y=1
?>
我解释下
来一个简单的式子来说:2x+3y=9
原理:
在此函数中生成出这样的正则
^(.*)\1{1}(.*)\2{2}$
去匹配一个长度为9的重复字符串 “-”,匹配出两个分组的长度,就是他的x 和 y的值了
正则解释:
【(.*)】也就是0到无数个【.】点号。
\1就是引用一组。后面【{1}】就是重复1次。
后半是\2就是引用2组。后面【{2}】就是重复1次。
以下是那个英文博客的翻译:
二元方程17x + 12y = 51,其表达式【^(.*)\1{16}(.*)\2{11}$】。很好理解。【(.*)】也就是0到无数个【.】点号。(这里是接着上文说的,其实,【.】点号想表示的是字符“1”)
也就是0到无数个1,后面【\1】引用一次。后面【{16}】就是16次。作用于前面的【\1】,也就是16次引用。加上开始的【(.*)】一共正好17次。后面一个就不说了,跟这个一样。
正则引擎会依次尝试【(.*)】中0到无数个字符“1”,0个字符“1”,1个字符“1”,2个字符“1”一直增加的尝试。直到成功,否则要尝试完所有字符“1”的最大个数(这里是51个字符“1”)。
以上是“如何使用正则表达式解二元方程式”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!
分享名称:如何使用正则表达式解二元方程式
网址分享:http://azwzsj.com/article/pogggs.html