From http://java.sun.com/j2se/1.5.0/docs/api/java/util/regex/Pattern.html http://java.sun.com/j2se/1.5.0/docs/api/java/util/regex/Pattern.html:
\Z The end of the input but for the final terminator, if any
\z The end of the input
但这在实践中意味着什么?当我使用 \Z 或 \z 时,你能给我一个例子吗?
在我的测试中我认为"StackOverflow\n".matches("StackOverflow\\z")
将返回 true 并且"StackOverflow\n".matches("StackOverflow\\Z")
返回假。但实际上两者都返回 false。错误在哪里?
虽然\Z
and $
仅在字符串末尾匹配(当
插入符号和美元在嵌入换行符处匹配的选项是
关闭),但有一个例外。如果字符串以换行符结尾,
然后\Z
and $
将在换行符之前的位置匹配,
而不是在字符串的最后。
这种“增强”是由 Perl 引入的,并被许多正则表达式复制
风格,包括 Java、.NET 和 PCRE。在 Perl 中,当读取一行时
从文件中,生成的字符串将以换行符结尾。阅读
文件中包含文本“joe”的行会生成字符串 joe\n。
当应用于该字符串时,两者^[a-z]+$
and \A[a-z]+\Z
将要
匹配“乔”。
如果您只想在字符串的绝对末尾进行匹配,请使用\z
(小写 z 而不是大写 Z)。\A[a-z]+\z
才不是
匹配乔\n。\z
换行符后匹配,不匹配
按字符类别。
http://www.regular-expressions.info/anchors.html http://www.regular-expressions.info/anchors.html
我读这篇文章的方式"StackOverflow\n".matches("StackOverflow\\z")
应该返回 false,因为您的模式不包含换行符。
"StackOverflow\n".matches("StackOverflow\\z\\n") => false
"StackOverflow\n".matches("StackOverflow\\Z\\n") => true
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)