我想匹配一个由单词边界,行的开始或结束,或点包围的关键字。
Pattern.compile("[\\.|\b]v2[\b]").matcher("CREATE VIEW ${nameWithSchemaName} AS select id from testViewCreationOrder.v2").find()
字符串因为v2是行尾,所以它返回false。
[\\.|\b]v2[\b|$]
型它仍然返回false,但如果我使用
[\\.|\b]v2
型返回true什么是错误的?
mqkwyuun1#
你的 * 主要 * 问题是使用了"\b",这是一个退格符,而不是"\\b",这是一个(文字)单词边界。另一个问题是把一个单词边界放在一个字符类中,并期望它工作。单词边界不是一个字符,所以"(\\.\\b)v2\\b"而不是"[\\.|\b]v2[\b]",但你不需要 * 单词边界,因为点在点和单词字符之间创建了一个,所以只需:
"\b"
"\\b"
"(\\.\\b)v2\\b"
"[\\.|\b]v2[\b]"
"\\bv2\\b"
字符串是你想要的
1条答案
按热度按时间mqkwyuun1#
你的 * 主要 * 问题是使用了
"\b"
,这是一个退格符,而不是"\\b"
,这是一个(文字)单词边界。另一个问题是把一个单词边界放在一个字符类中,并期望它工作。单词边界不是一个字符,所以
"(\\.\\b)v2\\b"
而不是"[\\.|\b]v2[\b]"
,但你不需要 * 单词边界,因为点在点和单词字符之间创建了一个,所以只需:字符串
是你想要的