如今,许多程序员都知道快速编写正则表达式的乐趣,这些天通常是在某些Web服务的帮助下,或更传统的是在交互式提示下,或者编写一个正在开发正则表达式的小脚本以及一系列测试用例。 。无论哪种情况,该过程都是迭代的并且相当快:不断破解看起来像神秘的字符串,直到它匹配并捕获您想要的内容,然后拒绝您不需要的内容。
对于一个简单的情况,结果可能是这样的,例如Java regexp:
Pattern re = Pattern.compile(
"^\\s*(?:(?:([\\d]+)\\s*:\\s*)?(?:([\\d]+)\\s*:\\s*))?([\\d]+)(?:\\s*[.,]\\s*([0-9]+))?\\s*$"
);
许多程序员还知道需要编辑正则表达式或仅在遗留代码库中围绕正则表达式进行编码的痛苦。经过一些编辑后,对于熟悉regexp的任何人来说,regexp仍然很容易理解,regexp的资深人士应立即查看其功能(如果有人想要练习,请在帖子末尾回答自己弄清楚)。
但是,将正则表达式变成真正的只写对象并不需要变得更加复杂,即使有了勤奋的文档(每个人当然会对他们编写的所有复杂正则表达式都执行此操作……),修改正则表达式就变成了艰巨的任务。如果未对regexp进行仔细的单元测试(这当然也是每个人对其所有复杂的regexp的肯定和否定都有全面的单元测试...),这也可能是非常危险的任务。
因此,长话短说,是否存在不损失正则表达式的读写解决方案/替代方案?上面的正则表达式在替代方法下的外观如何?任何语言都可以,尽管最好使用多语言解决方案,但正则表达式是多语言的。
然后,较早的regexp所做的就是这样:解析格式为数字的字符串1:2:3.4
,捕获每个数字,其中允许空格,并且只3
需要空格。