今天在测试之前写的ansible playbook 发现一个正则表达式没有匹配到,经过摸索后,我怀疑是因为正则表达式中包含了保留字符$,于是将该字符转义处理,果然问题解决了。 修改前的正则
今天在测试之前写的ansible playbook 发现一个正则表达式没有匹配到,经过摸索后,我怀疑是因为正则表达式中包含了保留字符$,于是将该字符转义处理,果然问题解决了。
修改前的正则表达式: ^path=.;$Java_HOME
修改后的正则表达式:^path=.;$JAVA_HOME
经过查阅资料,以下特殊字符为正则表达式的保留字符。
表达式全集
n”匹配字符“n”。“\n”匹配一个换行符。串行“\\”匹配“\”而“\(”则匹配“(”。\n”或“\r”之后的位置。\n”或“\r”之前的位置。z”以及“zoo”。*等价于{0,}。zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等价于{1,}。do(es)?”可以匹配“does”或“does”中的“do”。?等价于{0,1}。o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的两个o。o{2,}”不能匹配“Bob”中的“o”,但能匹配“foooood”中的所有o。“o{1,}”等价于“o+”。“o{0,}”则等价于“o*”。o{1,3}”将匹配“fooooood”中的前三个o。“o{0,1}”等价于“o?”。请注意在逗号和两个数之间不能有空格。oooo”,“o+?”将匹配单个“o”,而“o+”将匹配所有“o”。\n”之外的任何单个字符。要匹配包括“\n”在内的任何字符,请使用像“(.|\n)”的模式。\(”或“\)”。(|)”来组合一个模式的各个部分是很有用。例如“industr(?:y|ies)”就是一个比“industry|industries”更简略的表达式。Windows(?=95|98|NT|2000)”能匹配“Windows2000”中的“Windows”,但不能匹配“Windows3.1”中的“Windows”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。Windows(?!95|98|NT|2000)”能匹配“Windows3.1”中的“Windows”,但不能匹配“Windows2000”中的“Windows”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始(?<=95|98|NT|2000)Windows”能匹配“2000Windows”中的“Windows”,但不能匹配“3.1Windows”中的“Windows”。(?<!95|98|NT|2000)Windows”能匹配“3.1Windows”中的“Windows”,但不能匹配“2000Windows”中的“Windows”。z|food”能匹配“z”或“food”。“(z|f)ood”则匹配“zood”或“food”。[abc]”可以匹配“plain”中的“a”。[^abc]”可以匹配“plain”中的“p”。[a-z]”可以匹配“a”到“z”范围内的任意小写字母字符。[^a-z]”可以匹配任何不在“a”到“z”范围内的任意字符。er\b”可以匹配“never”中的“er”,但不能匹配“verb”中的“er”。er\B”能匹配“verb”中的“er”,但不能匹配“never”中的“er”。c”字符。[A-Za-z0-9_]”。[^A-Za-z0-9_]”。\x41”匹配“A”。“\x041”则等价于“\x04&1”。正则表达式中可以使用ASCII编码。.(.)\1”匹配两个连续的相同字符。常用正则表达式
/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/
