我决定学习一些正则表达式的基础知识。我在网上使用 Regex One 课程,我在第 11课上被困了一段时间,但我想我现在明白了。
这就是任务。
“编写一个仅匹配以下 PDF 文件的文件名(不包括扩展名)的正则表达式。”
task text capture
capture text file_a_record_file.pdf file_a_record_file
capture text file_yesterday.pdf file_yesterday
skip text testfile_fake.pdf.tmp
Run Code Online (Sandbox Code Playgroud)
有一个输入字段,您可以在其中输入模式以完成任务。经过一些试验和错误,这就是我想出的。
^(file_a_record_file)\.pdf$
Run Code Online (Sandbox Code Playgroud)
这将匹配文件名file_a_record_file.pdf但只“捕获” file_a_record_file。有什么区别?...匹配和“捕获”之间有什么区别?这有什么用?这个“组匹配”如何?
现在这对第一个文件有效,但对第二个文件无效。该任务说我需要制作一个模式来匹配并捕获两个文件的文件名,不包括扩展名。所以这就是我接下来提出的。
^(file_.*)\.pdf$
Run Code Online (Sandbox Code Playgroud)
由于两个文件名都以file_开头,我认为最好匹配它,然后告诉它匹配后面的任何字符,然后用括号退出组(“组”是括号内的内容,对?) 并用反斜杠转义点并以文件扩展名结尾。
这可以用更严格的方式描述吗?网站上没有给出正确的解决方案。所以我没有什么可以检查我的答案。很遗憾,因为我认为这是对正则表达式的很好的介绍。每节课给出的例子有时很难理解。
再说一次,这有什么用?他提到了一些关于命令行的东西,我认为他的意思是它可以用来重用命令或其他东西......好吧,我真的不明白他在说什么。
想象一下,我们有一个命令行工具,它仅在某个目录中的每个文件不存在时才将其复制到服务器,并打印每个文件名作为结果。现在,如果我想对每个文件名执行另一项任务,那么我不仅需要一个匹配文件名的正则表达式,还需要某种方法来提取该信息。
提取信息?他在说什么?有人可以告诉我这有什么用,并给我一个真实世界的例子吗?
在您链接到的课程中,您需要编写一个正则表达式来捕获这两个文件名
file_a_record_file.pdf
file_yesterday.pdf
Run Code Online (Sandbox Code Playgroud)
并跳过
testfile_fake.pdf.tmp
Run Code Online (Sandbox Code Playgroud)
最简单的正则表达式是
(.*)\.pdf$
Run Code Online (Sandbox Code Playgroud)
这意味着匹配以 结尾的所有内容.pdf但仅捕获文件名。
那么,为什么捕获有用呢?这取决于您使用这些正则表达式的程序。捕获模式允许您将捕获的内容保存为变量。例如,使用 Perl,第一个捕获的模式是$1,第二个$2等等:
echo "Hello world" | perl -ne '/(.+) (.+)/; print "$2 $1\n"'
Run Code Online (Sandbox Code Playgroud)
这将打印“world Hello”,因为第一个括号被捕获 Hello,第二个括号被捕获,world但我们正在打印,$2 $1因此两个匹配项被反转。
其他正则表达式实现允许您指的是使用摄像图案\1,\2等等。例如,GNU sed:
echo "Hello world" | sed 's/\(.*\) \(.*\)/\2 \1/'
Run Code Online (Sandbox Code Playgroud)
因此,一般来说,当您稍后需要参考这些模式时,捕获模式很有用。这称为引用,稍后将在您正在做的教程中简要说明。
| 归档时间: |
|
| 查看次数: |
1062 次 |
| 最近记录: |