如何使用基本正则表达式更好地搜索和节省时间

无论你是在用Grep搜索,还是在寻找可以批量重命名文件的程序,你可能都想知道是否有更简单的方法来完成你的工作。谢天谢地,有,它被称为“正则表达式”...

如何使用基本正则表达式更好地搜索和节省时间

无论你是在用Grep搜索,还是在寻找可以批量重命名文件的程序,你可能都想知道是否有更简单的方法来完成你的工作。谢天谢地,有,它被称为“正则表达式”

(漫画来自XKCD.com网站)

什么是正则表达式(regular expressi***)?

正则表达式是以非常特定的方式格式化的语句,可以代表许多不同的结果。也称为“regex”或“regexp”,它们主要用于搜索和文件命名功能。一个正则表达式可以像一个公式一样用来创建许多不同的可能输出,所有这些输出都会被搜索。或者,您可以通过指定regex来指定一组文件的命名方式,并且您的软件可以增量地移动到下一个预期的输出。通过这种方式,您可以非常轻松高效地重命名多个文件夹中的多个文件,并且可以超越简单编号系统的限制。

因为正则表达式的使用依赖于特殊的语法,所以您的程序必须能够读取和解析它们。许多用于Windows和OS X的批处理文件重命名程序都支持regexps,以及跨平台搜索工具GREP(我们在Bash Scripting for Beginers Guide中介绍了GREP)和用于*Nix的Awk命令行工具。此外,许多可选的文件管理器、启动器和搜索工具都使用它们,它们在Perl和Ruby等编程语言中占有非常重要的地位。其他开发环境,如.NET、java和Python,以及即将到来的C++ 11,都提供了使用正则表达式的标准库。正如您所想象的,当您试图最小化程序中的代码量时,它们会非常有用。

关于转义字符的注释

在我们用例子向你们展示之前,我们想指出一些事情。我们将使用bashshell和grep命令演示如何应用正则表达式。问题是,有时我们需要使用需要传递给grep的特殊字符,bash shell将解释该字符,因为shell也使用它。在这种情况下,我们需要“逃离”这些人物。这可能会让人困惑,因为这种字符的“转义”也发生在regexp中。例如,如果我们想在grep中输入:

\<

我们必须用以下内容替换:

\\\<

这里的每个特殊字符都有一个反斜杠。或者,也可以使用单引号:

‘\<’

单引号告诉巴什不要解释它们的内部。虽然我们需要采取这些步骤,以便我们能够为您演示,但是您的程序(特别是基于GUI的程序)通常不需要这些额外步骤。为了保持简单和简单,实际的正则表达式将作为引用文本提供给您,您将在命令行截图中看到转义语法。

他们如何扩张?

regexp是一种非常简洁的表述术语的方法,这样您的计算机就可以将它们扩展为多个选项。我们来看看下面的例子:

tom[0123456789]

方括号–[和]–告诉解析引擎,无论内部是什么,任何一个字符都可以用来匹配。这些括号内的任何内容都称为字符集。

因此,如果我们有一个庞大的条目列表,并且我们使用这个正则表达式来搜索,那么以下术语将匹配:

  • 汤姆
  • 汤姆0
  • 汤姆1
  • 汤姆2
  • 汤姆3

等等。但是,以下列表将不匹配,因此不会显示在结果中:

  • 西红柿;正则表达式不解释“汤姆”后面的任何字母
  • 汤姆;正则表达式区分大小写!

您还可以选择使用句点(.)进行搜索,只要存在字符,句点(.)将允许存在任何字符。

如何使用基本正则表达式更好地搜索和节省时间

正如你所见,与

.tom

没有提到开头只有“汤姆”的词。甚至“绿色西红柿”也出现了,因为“tom”之前的空格算作一个字符,但像“tomF”这样的词在开头没有字符,因此被忽略了。

注意:Grep的默认行为是在某些部分与regex匹配时返回整行文本。其他程序可能不会这样做,您可以在grep中用“-o”标志关闭它。

也可以使用管道(|)指定替换,如下所示:

speciali(s|z)e

这将发现:

  • 专攻
  • 专门从事

在使用grep命令时,我们需要用反斜杠转义特殊字符(、|和),并使用“-E”标志来实现这一点,避免出现难看的错误。

如何使用基本正则表达式更好地搜索和节省时间

正如我们上面提到的,这是因为我们需要告诉bashshell将这些字符传递给grep,而不要对它们做任何事情。“-E”标志告诉grep使用括号和管道作为特殊字符。

可以使用方括号内和集合开头的**符号进行排除搜索:

tom[^F|0-9]

再说一次,如果你在使用grep和bash,记得逃出那个管道!

如何使用基本正则表达式更好地搜索和节省时间

在列表中但未显示的术语包括:

  • 汤姆0
  • 汤姆5
  • 汤姆9
  • 托夫

这些和我们的正则表达式不匹配。

如何利用环境?

通常,我们根据边界进行搜索。有时我们只希望字符串出现在一个词的开头、一个词的结尾或一行代码的末尾。这是很容易做到的使用我们所谓的锚。

使用**符号(括号外)可以指定行的“开始”。

^tom

如何使用基本正则表达式更好地搜索和节省时间

要搜索行的末尾,请使用美元符号。

tom$

如何使用基本正则表达式更好地搜索和节省时间

您可以看到,在本例中,我们的搜索字符串位于锚点之前。

您也可以选择出现在单词开头或结尾的匹配项,而不是整行。

\<tom

tom\>

如何使用基本正则表达式更好地搜索和节省时间

如何使用基本正则表达式更好地搜索和节省时间

正如我们在本文开头的注释中提到的,我们需要转义这些特殊字符,因为我们使用的是bash。或者,也可以使用单引号:

如何使用基本正则表达式更好地搜索和节省时间

如何使用基本正则表达式更好地搜索和节省时间

结果是一样的。确保使用单引号,而不是双引号。

高级regexp的其他资源

我们只触及冰山一角。您还可以搜索货币标记所描绘的货币术语,并搜索三个或更多匹配术语中的任意一个。事情会变得非常复杂。如果你对学习正则表达式感兴趣,那么请看下面的源代码。

  • Zytrax.com网站有几页具体的例子,说明为什么事情会和不匹配。
  • 常规-表达式.info也有一个**指南很多更先进的东西,以及一个方便的参考页。
  • Gnu.org网站有一个专门用于将regexps与grep一起使用的页面。

您还可以使用免费的基于Flash的在线工具RegExr构建和测试正则表达式。它是免费的,可以在大多数浏览器中使用。


你喜欢用正则表达式吗?知道一个伟大的批量重命名器使用它们吗?也许你只是想吹嘘你的格瑞普。通过评论贡献你的想法!

 

  • 发表于 2021-04-12 20:50
  • 阅读 ( 146 )
  • 分类:互联网

你可能感兴趣的文章

如何在多个文件中查找和替换单词

...用运算符查找和替换所有匹配的单词或短语,请选择正则表达式。如果你只是用文本替换文本,你可以坚持使用普通文本。 ...

  • 发布于 2021-03-14 20:34
  • 阅读 ( 173 )

microsoft word的15个商务信函模板可为您节省时间

...些microsoftword商务信函模板可以帮助您了解要写什么以及如何专业地传递信息。 ...

  • 发布于 2021-03-16 22:37
  • 阅读 ( 367 )

windows10最佳免费搜索工具

...何目录树,它将通过匹配内容与您的搜索查询(支持正则表达式)来查找文件。 ...

  • 发布于 2021-03-24 15:54
  • 阅读 ( 199 )

如何在windows10上轻松批量重命名文件

...想用的旁边打个勾。以下是每个选项的作用: 使用正则表达式:这允许使用称为正则表达式的强大搜索字符串,它可以启用非常深入或复杂的搜索和替换操作。 区分大小写:此选项使搜索敏感,无论字母是大写还是小写。例如...

  • 发布于 2021-03-31 21:02
  • 阅读 ( 344 )

如何在linux上使用sed命令

...命令。然而,sed的模式匹配和文本选择功能严重依赖正则表达式(regex)。你需要熟悉这些才能充分利用sed。 相关:如何在Linux上使用正则表达式(regex) 一个简单的例子 首先,我们将使用echo通过管道向sed发送一些文本,并让se...

  • 发布于 2021-04-02 08:03
  • 阅读 ( 153 )

如何在linux上使用正则表达式(regex)

...什么吗?他们给你命令行魔法!我们将教你如何施展正则表达式法术并提升你的命令行技能。 什么是正则表达式(regular expressi***)? 正则表达式(regex)是一种查找匹配字符序列的方法。它们使用字母和符号来定义在文件或流中...

  • 发布于 2021-04-02 11:27
  • 阅读 ( 219 )

如何在linux上使用grep命令

...一声。 kenthompson从ed编辑器(发音为eedee)中提取了正则表达式搜索功能,并为自己创建了一个小程序来搜索文本文件。他在贝尔实验室的部门负责人道格·麦克罗伊(Doug Mcilroy)找到汤普森,描述了他的一位同事李·麦克马洪(L...

  • 发布于 2021-04-02 17:23
  • 阅读 ( 165 )

免费下载:微软批量重命名powertoy

...体功能。 这里有一个很好的超级用户特性:“使用正则表达式”。这些特性可以让您执行更复杂的搜索模式来修改文件名。PowerRename文档为此工具提供了几个示例正则表达式。掌握正则表达式,您几乎可以用PowerRename做任何您能...

  • 发布于 2021-04-03 00:24
  • 阅读 ( 156 )

shell脚本初学者指南3:更多基本命令和链

...这是Linux中最强大、最有用的命令之一。它代表全局/正则表达式打印。它浏览一个文件并打印与特定模式匹配的任何行。因为这个模式是基于“正则表达式”的,所以一条简洁的行可以产生大量要匹配的模式。不过,对于not,您...

  • 发布于 2021-04-12 20:58
  • 阅读 ( 154 )

在linux上使用regexxer简化正则表达式搜索/替换

...否替换或跳过找到的每个文件。只需在搜索框中输入正则表达式或关键字,然后单击“查找”按钮。 应用程序将找到第一个文件,并在下面的小文本框中显示建议的更改,您可以选择替换或按箭头转到下一个文件。 这个应用...

  • 发布于 2021-04-14 12:29
  • 阅读 ( 93 )
LUAN48622
LUAN48622

0 篇文章

相关推荐