我开始学习正则表达式,我想知道:在哪些情况下使用它们更好?
7 回答
正则表达式是一种可以应用于文本内容的模式匹配形式。以 DOS 通配符为例?和 * 可以在搜索文件时使用。那是 RegExp 的一种非常有限的子集。例如,如果您想查找所有以“fn”开头、后跟 1 到 4 个随机字符并以“ht.txt”结尾的文件,那么使用通常的 DOS 通配符是无法做到的。另一方面,RegExp 可以处理这个以及更复杂的模式。
简而言之,正则表达式是一种有效地
- 处理数据
- 搜索和替换字符串
- 提供扩展的字符串处理。
通常,正则表达式本身可以提供字符串处理,而其他功能(例如内置字符串方法和属性)只有在复杂的函数或循环中使用它们时才能做到。
当您尝试查找/替换/验证复杂的字符串模式时。
我在比较字符串(preg_match)、替换子字符串(sed、preg_replace)、替换字符(sed、preg_replace)、在文件中搜索字符串(grep)、拆分字符串(preg_split)等时使用正则表达式。
它是一种非常灵活和广泛使用的模式表达语言,了解它非常有用。
但!就像他们说的扑克,很容易学,但很难掌握。
我刚刚遇到了一个我认为非常适合 RegEx的问题,看看并自己决定。
在某些情况下,正则表达式是>>NOT<<合适的(通常;总是有例外)。
- 解析 HTML
- 解析 XML
在上述情况下,DOM 解析器几乎总是更好的选择。语法很复杂,边缘情况太多,比如嵌套标签。
还要确保考虑未来的维护程序员(可能是你)。注释和/或精心选择的方法/常量/变量名称可以带来天壤之别,尤其是对于不熟悉正则表达式的开发人员而言。
正则表达式是一种用于解析文本的 dsl(领域特定语言)。就像 xpath 是一个用于遍历 xml 的 dsl。它本质上是通用语言中的一种迷你语言。您可以在非常少的代码中完成相当多的工作,因为它专门用于一个狭窄的目的。正则表达式的一个非常常见的用途是检查字符串是否是电子邮件地址、电话号码、ssn 等......
在某些情况下,如果您需要更好的性能,您应该避免使用正则表达式来编写代码。这方面的一个例子是解析非常大的 CSV 文件。
正则表达式对于验证自由文本输入的格式特别有用。当然,他们无法验证数据的正确性,只能验证其格式。您必须记住某些类型的值(例如电话号码或邮政编码)的区域差异。但是对于可以将有效输入定义为文本模式的情况,正则表达式可以快速完成验证。