正则表达式字边界 [duplicate]

RegExp Word Boundaries [duplicate]

提问人:DbSchema 提问时间:11/15/2023 更新时间:11/16/2023 访问量:43

问:

我想匹配一个被单词边界、行头或行尾或点包围的关键字。

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 怎么了?

Java 正则表达式

评论

0赞 Hao Wu 11/15/2023
不能将锚点放在字符集(方括号)中。请改用条件:(\\.|\b)
0赞 Nick 11/15/2023
[\\.|\b]是与其中一个字符匹配的字符类,或 。你想要一个交替(注意转义的\之前)。.|b(\\.|\\b)b

答:

1赞 Bohemian 11/15/2023 #1

您的主要问题是使用 ,这是一个退格字符,而不是 ,这是一个(字面)单词边界。"\b""\\b"

另一个问题是在字符类中放置单词边界。单词边界不是字符,因此不需要单词边界,因为点在点和单词字符之间创建一个,因此只需:"(\\.\\b)v2\\b""[\\.|\b]v2[\b]"

"\\bv2\\b"

是你想要的