VerbalExpressions - 轻松使用正则表达式
当你开始学习一门新的编程语言时,也许你已经学习了以下步骤:变量、赋值、字符串、运算符……你需要关注的一个主要主题是string operations
。例如:从全名中获取名字,查找并审查消息中的所有手机号码,……
在操作过程中,我们通常需要处理一些常见的过程。其中一个重复的过程是查找子字符串并对其执行一些操作。也许你在学习之初就做过类似的事情。
int checkMatchStubPattern(char* string) {
for(int i = 0; i < strlen(string); i++) {
// logic for checking string pattern
...
}
return ...
}
这方法没错,但很耗时。你必须在每种情况下都修改检查逻辑。代码量更大,bug也更多,当然维护起来也很困难。好在Regular Expression - Regex
有英雄可以解决这类问题:查找、输入验证…… 也印证了 的用法Regex
,所有编程语言都支持Regex
字符串操作。
正则表达式是定义搜索模式的字符序列。字符串搜索算法会使用该模式对字符串进行“查找”或“查找并替换”操作,或用于输入验证。(来源:维基百科)
Regex
是解决该问题的有效工具;但它是有代价的。它确实很难阅读和理解(但学习起来并不难)。首先尝试阅读下面的例子。
由于语法复杂,阅读和理解起来非常困难Regex
。此外,你似乎很少使用它Regex
。投资回报率 (ROI) 太低;几乎所有Regex
你需要用到的常用工具(密码、URL、IP 地址等等)都可以在互联网上找到。你愿意花几周时间学习一年只用四五次的东西吗?还是仅仅浏览几个网站,花 5 分钟左右就能找到结果?这种思维方式导致开发人员倾向于在 Google 上搜索Regex
,然后根据自己的需求进行修改。有时,重复搜索和修改的过程可能要花费几个小时甚至一整天的时间……
Regex
解决了这个string operation
问题;但是的问题怎么办呢Regex
?幸运的是,它可以用来解决Verbal Expressions
。试着看看这个例子。
VerEx()
.startOfLine()
.then('http')
.maybe('s')
.then('://')
.anythingBut(' ')
.endOfLine();
希望你读完这个例子后不会感到沮丧。Verbal Expressions
上面的代码定义遵循以下规则:
- URL 必须以“http”或“https”开头。
- URL 中必须包含“://”。
- URL 中“://”后面可以包含任何内容,只要不是空格即可。
Regex
上述代码生成的是: /^(?:http)(?:s)?(?:\:\/\/)(?:[^ ]*)$/
。略有不同,但功能相同。您可以在这里Verbal Expressions
找到几种语言的实现。
VerbalExpressions 解决了 的最大问题Regex
。它是可读性强且易于理解的正则表达式。在我看来,从Regex
到 的过渡和从到 的VerbalExpressions
过渡一样好。SQL
ORM
无论如何,VerbalExpressions
它仍然有一些缺点。你需要在项目中安装一个新的库,有时这很麻烦(比如你的客户、经理……觉得没有必要)。在这种情况下,你可以使用VerbalRegex;编写代码,它会Regex
为你生成。
通过访问verbalregex.com来试用此工具。
结论
VerbalExpressions
它并非 的替代品Regex
,而是一种让 更易读的 编写方式Regex
。它可以减轻 的痛苦Regex
,实际上让编写表达式再次变得有趣。但请记住,Regex
在某些复杂情况下, 似乎仍然是最佳选择。