VerbalExpressions - 轻松使用正则表达式

2025-05-24

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是解决该问题的有效工具;但它是有代价的。它确实很难阅读和理解(但学习起来并不难)。首先尝试阅读下面的例子。

检查字符串是否为有效的 URL

由于语法复杂,阅读和理解起来非常困难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过渡一样好SQLORM

无论如何,VerbalExpressions它仍然有一些缺点。你需要在项目中安装一个新的库,有时这很麻烦(比如你的客户、经理……觉得没有必要)。在这种情况下,你可以使用VerbalRegex;编写代码,它会Regex为你生成。

生成正则表达式的在线工具

通过访问verbalregex.com来试用此工具

结论

VerbalExpressions它并非 的替代品Regex,而是一种让 更易读的 编写方式Regex。它可以减轻 的痛苦Regex,实际上让编写表达式再次变得有趣。但请记住,Regex在某些复杂情况下, 似乎仍然是最佳选择。

文章来源:https://dev.to/bachnxhedspi/verbalexpressions---regularexpression-made-easy-27a8
PREV
JWT 客户端身份验证终极指南(停止使用本地存储!!!)
NEXT
令人惊叹的纯 HTML 和 CSS 背景动画