![RegEx 的逐项含义:“(/.*)?”](https://linux22.com/image/935483/RegEx%20%E7%9A%84%E9%80%90%E9%A1%B9%E5%90%AB%E4%B9%89%EF%BC%9A%E2%80%9C(%2F.*)%EF%BC%9F%E2%80%9D.png)
我正在尝试确定这个正则表达式的每个元素:“(/.*)?”
以下是我迄今为止自学的知识:
() == 将正则表达式分组在一起
/ == ???
. == 等于任意一个字符
* == 等于零个或更多前一个字符(在这种情况下,前一个字符是否为“。”?)
? == 等于零或一个前一个字符(可能是 (/.*) 所代表的任何内容/所有内容,对吗?)
我可以得到帮助来填补空白吗?例如:在这种情况下“/”是什么意思?
答案1
首先,正则表达式有几种不同的风格:简单grep
、扩展egrep
、Perl 类;可能还有更多。它们有细微的不同;首先是分组,(foo|bar|baz)
puregrep
不支持,但egrep
Perl 却支持。
在您的具体示例中,您正确地解读了各个部分。/
实际上是一个正斜杠,没有任何特殊含义。如果它是一个反斜杠\
,它将转义以下字符,即如果它在该上下文中具有特殊含义,它将失去该特殊含义:\.
表示“文字句点”,而不是“任何字符”。
不同变体的要点是:你需要知道哪一个与你的上下文相关。如果是延长正则表达式(egrep 或 Perl),(
实际上)
意味着分组,如果是简单正则表达式(grep),它就是文字括号。
关于这个主题已经有整本书了,网上也有很多教程。你可能想先从这方面入手man grep
,然后再逐步推进。
正则表达式的许多奇特部分很少需要;您大多可以使用基础知识,并在需要时(或当您必须理解别人的代码时)查找更神秘的东西。