网站首页 > java教程 正文
关注微信:DuoDaaMath每天获得更多数学趣文
作者,Steven Levithan
翻译,radium,哆嗒数学网翻译组成员,数学专业学生
用正则表达式并不擅长解决数学问题。对一个正则表达式系统,字符从0到9,和其他的一样,并没有什么特殊的地方。
在这里我需要提到两个例外Perl和PCRE,这两个例外允许动态代码在匹配过程中的任何一点上运行,这为我们提供了大量额外的契机。Perl是通过代码嵌入正则表达式,PCRE用标注系统去表达外部函数。但正则表达式偏好这些例外,甚至利用他们去拓展自己的能力,让方程式告诉你更多,呈现的更完整。一般的,有关数学的问题像匹配数值范围(matching numeric ranges)(在匹配一些需画大量时间的长文本的任务上很有用)在运行中是一个痛,如果他们有可能的话。
但是在最基本的正则表达式的系统中,这种力量和表现可以引导出一些漂亮的技巧。就像匹配非素长度字符串一样!这时基础的正则表达式就有些出名了。就连一个黑客也会惊讶你是用的是正则表达式来解决的一个简单的线性方程组。我在摆弄 RegexBuddy's 的调试器时无意中蹦出了这个想法。严格的POSIX ERE的实现和其他深邃的味道,不允许反向引用,因此执行本生是简单的,工作也相当普遍。这里有一个样板:
^(.*)\1{A-1}(.*)\2{B-1}$
现在让我们来解关于x和y的方程,像17X+12y=51 ,A和B是常量占位符对应这个例子中的17和12.所以正则表达式成为^(.*)\1{16}(.*)\2{11}$
我们从A,B值中减去1因为我们重复反向引用,而子模式之前已经匹配过一次。如果你运行正则表达式去对付51字符串,当长度为$1
时(反向引用1)将会是3(这就告诉我们x=3),当长度为$2
时(反向引用2)将会是0(意味着y=0)事实上17*3+12*0=51.如果方程没有解,那么正则表达式将无法匹配字符串。如果方程有多种可能的解,那么返回的是x的最大值,因为这个值最早被处理。
快来尝试吧!你可以用正则表达式来解各种各样的你喜欢的形式类似的方程。例如11x+2y+5z=115可以用^(.*)\1{10}(.*)\2{1}(.*)\3{4}$
和115字符的源串来解决(结果是11*10+2*0+5*1=115)。运行^(.*)\1{12}$
去对付247字符的字符串,那么你将会因为反向引用一次得到一个19字符的值,像13*19=247.请记住,随着整数和字符串的长度的增加,变量的数目增加,通过正则表达式软件的回溯的数量也会增加。对于一些图像的门栏这种方法是很慢的甚至无用的。但我不在乎,他依然很酷!
猜你喜欢
- 2025-09-24 30个Excel/WPS新公式实战大全,效率翻倍不是梦!
- 2025-09-24 Ngnix的server_name正则匹配执行顺序
- 2025-09-24 学习VBA,报表做到飞 第四章 正则表达式 4.12 正则表达式与数组结合
- 2025-09-24 Django路由配置方法全解_请简述django的url路由流程
- 2025-09-24 这几种正则表达式的“字符集合”,想要入门regexp函数,必须了解
- 2025-09-24 玩转Spring中强大的spel表达式!_spring的scope有几种
- 2025-09-24 Python中使用正则表达式_python 正则表达
- 2025-09-24 Python 正则表达式教程 第 4 章:贪婪与非贪婪匹配
- 2025-09-24 5分钟掌握Python(十六)之正则表达式
- 2025-09-24 学习VBA,报表做到飞 第四章 正则表达式 4.3 正则表达式的方法和属性
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)