你好,
我无法理解 unix 终端下正则表达式中句点 (.) 运算符的完整功能。
它说它匹配任何单个字符。当我给grep 'ct' a.txt时,它返回结果,如 cat、cbt、cmt 等。它是否也应该发送任何其他类型的数据?因为我不清楚这个时期运营商的基础知识。
如果我给grep 'c[abm].t' a.txt怎么办,它没有给出预期的结果,即我认为它应该只打印 cat 或 cbt 或 cmt 但它只打印 caat,这是数据之一。请说清楚。
另外如果有任何教程,其中我可以掌握正则表达式的技能,那么请分享..非常感谢..请尝试解决我的问题..
谢谢。
句点运算符匹配任何字符一次且仅匹配一次。因此,在您的第一个示例中,它匹配 ac 后跟一个字符,该字符是任何后跟 t 的字符。
在您的第二个示例中,您的模式被告知要匹配 4 个并且恰好是 4 个字符。他们是:
C
其次是
[abm] - 这些中的任何一个
其次是
. - 任何单个字符
其次是
吨
至于学习正则表达式,请查看:https ://stackoverflow.com/questions/4736/learning-regular-expressions
在您的示例中, grep 'c[abm].t' a.txt 将输出 a.txt 中包含您指定的至少四个字符的任何行。一个“c”,一个“a”,一个“b”或一个“m”,“任何字符”,然后是一个“t”。
'c[abm].t' 将匹配:
等等等等
希望这可以帮助您理解您的示例。
正则表达式可能非常复杂。除了我现在第一次找到和正在看的东西之外,我不能推荐任何东西。
请注意,有许多不同的风格和实现,从 grep(和 egrep / grep -E)到 perl 到 php 到 Javascript 等等。
当你和他们一起玩的时候,你会发现自己必须记住要从你的 shell 中正确地转义一些东西,并从正则表达式本身中排除其他的东西......你想要匹配文字 '.' 的地方。(句号),你需要 grep
'moo\.'
来匹配“moo”。而不是“moof”O'Reilly 的《掌握正则表达式》一书被认为是非常权威的。
正如描述所说,句点运算符匹配任何字符。所以 'ct' 将匹配 'cat', 'cbt', 'cct' ... 'czt', 'c1t' ... 等等。
在您的第二个示例中,结果与预期的一样。[abm] 匹配任何字符 a、b 或 m。之后,句点运算符匹配任何字符。所以表达式只寻找四个字母的字符串。
我发现学习正则表达式的最佳资源是 O'Reilly Media 的Mastering Regular Expressions。它不仅涵盖了大量的正则表达式方言,而且还深入了解了引擎如何实际进行处理。如果您要定期使用正则表达式(双关语),这是一个非常宝贵的资源。
如果您没有时间阅读有关该主题的整本书,那么尝试expresso(.net 语法)或执行 perl、ruby、java、.net 和 grep 语法(以及其他)的商业工具RegexBuddy可能会很方便. 这两种工具都可以让您测试什么会匹配和什么不会匹配,并且会向您展示正则表达式含义的树。
对于您的问题,您的预期行为将来自
c[abm]t
notc[abm].t
但已经指出。