嗨,
我无法理解unixterminal下正则expression式中的句点(。)运算符的完整function。
它说它匹配任何单个字符..当我给grep'ct'a.txt ,它返回的结果,如猫,cbt,cmt等。它应该pring其他types的数据? 因为我不清楚这个时期运营商的基础知识。
如果我给grep'c [abm] .t'a.txt怎么办,它没有给出预期的结果,即我认为它应该只打印cat或cbt或cmt,但它只打印caat,这是数据之一。 请澄清。
另外,如果有任何教程,其中我可以掌握正则expression式的技能,那么请分享..非常感谢..请尝试解决我的查询..
谢谢。
周期运算符只能匹配一次一次的任何字符。 所以在你的第一个例子中,它匹配了ac,后面跟着一个字符,后面跟着一个t。
在你的第二个例子中,你的模式被告知匹配4和4个字符。 他们是:
C
其次是
[abm] – 这些中的任何一个
其次是
。 – 任何单个字符
其次是
Ť
至于学习正则expression式,请点击这里: https ://stackoverflow.com/questions/4736/learning-regular-expressions
在你的例子中,grep'c [abm] .t'a.txt将输出a.txt中至less包含四个字符的行。 a'c','a','b'或'm','任何字符',然后是't'。
'c [abm] .t'将匹配:
cart caat ca%t caNt cm_t moo cbqt this whole line is returned because it contains a match rocbtt
等等
希望能帮助你理解你的例子。
正则expression式可能非常复杂。 我不能推荐任何东西,除了我现在所能find的第一个东西外。
请注意,有许多不同的口味和实现,从grep(和egrep / grep -E)到perl到php到Javascript等等。
当你和他们一起玩时,你会发现自己必须记住要正确地从你的shell中逃脱一些东西,并从正则expression式本身中排除其他东西…在那里你想匹配一个文字“。”。 (期间),你需要'moo\.' 匹配“mo”。 而不是'moof'
掌握O'Reilly的正则expression式(Mastering Regular Expressions)这本书被认为是相当确定的。
周期运算符匹配任何字符,就像描述所说的那样。 所以'ct'会匹配'猫','cbt','cct'…'czt','c1t'等。
在第二个例子中,结果与预期的一样。 [abm]匹配任何字符a,b或m。 之后,周期操作符匹配任何字符。 所以expression式只是寻找四个字母的string。
我已经find了学习正则expression式最好的资源,从O'Reilly Media 掌握正则expression式 。 它不仅涵盖了大量的正则expression式方言,而且还深入了解引擎如何处理。 一个非常宝贵的资源,如果你打算经常使用正则expression式(双关语意)。
如果你没有时间写一本关于这个主题的书,那么试用expresso (.net语法)或者使用perl,ruby,java,.net和grep语法(等等)的商业工具RegexBuddy可能会很方便。 。 这两种工具都可以让你testing什么和什么不匹配,并且会向你展示一个正则expression式意义的树。
对于你的问题,你的预期行为将来自c[abm]t而不是c[abm].t但是这已经被指出了。