今天在测试之前写的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]?)$/