Edw*_*lds 4 grep regular-expression
考虑:
$ echo '<H1>heading</H1>' | grep '<H\(1\|3\|2\)>.*</H\1>'
$ <H1>heading</H1>
Run Code Online (Sandbox Code Playgroud)
和
$ echo '<H1>heading</H3>' | grep '<H[1-3]>.*</H\1>'
$ grep: Invalid back reference
Run Code Online (Sandbox Code Playgroud)
第一个命令工作得很好。
[1-3]与 \(1\|3\|2\)两者都表示1或2或3?如果不是为什么?它们之间有什么区别?\(\)?关于第 1 部分:是的,两种模式都将匹配 1 或 2 或 3。
你的第一个问题的部分答案是你的第二个问题。够可笑的。
括号用于启用反向引用,并阐明运算符优先级/分组。
方括号包含一个字符类。它们用于匹配内部字符集的一个实例。
例如,\(hello\)将匹配单词“你好”,也将其放在适当的逆向引用变量(\1,\2,等)
另一方面,[hello]将匹配单个字符,集合 {e,h,l,o} 中的一个。
一些额外的数据(只是额外的信息):
反向引用基于打开括号的顺序,而不是关闭括号的顺序。使用嵌套括号这会变得很重要。为了可读性(this (that) (the other))而忽略转义字符——将导致\1包含this that the other; \2包含that和\3包含the other。
对字符类的计数会检查该字符类的更多实例。它们不必以相同的方式匹配。例如,[0-9]将匹配单个数字,[0-9]{5}并将匹配任何五个数字。如果您只想匹配 5 个重复数字,例如匹配 77777 或 33333 但不匹配 37497,请使用反向引用:\([0-9]\)\1{4}
()表示 «groupping»,这意味着设置可以作为 1 项操作的字符串的一部分,也可以用于反向引用。[]表示符号集因此,如果您仅对单个符号使用括号,则含义是相同的。但通常它用于多符号字符串,如(cat|dog)
| 归档时间: |
|
| 查看次数: |
2859 次 |
| 最近记录: |