java转义括号_关于java:如何转义模式编译的方括号
发布日期:2022-02-03 15:25:01 浏览次数:9 分类:技术文章

本文共 1526 字,大约阅读时间需要 5 分钟。

我有以逗号分隔的正则表达式列表:

.{8},[0-9],[^0-9A-Za-z ],[A-Z],[a-z]

我对逗号做了一个拆分。现在我正在尝试将这个regex与生成的密码匹配。问题是,Pattern.compile不喜欢不转义的方括号。请给我一个简单的函数,它接受这样一个字符串:[0-9]并返回转义字符串\[0-9\]。

出于某种原因,上面的答案对我不起作用。对于像我这样的追随者,这是我发现的。

不过,如果将模式存储在字符串中,则必须使用两个反斜杠。第一个反斜杠将第二个反斜杠转义到字符串中,所以regex看到的是\]。因为regex只看到一个反斜杠,所以它使用它来转义方括号。

\\]

在regex中,这将匹配一个右方括号。

例如,如果您试图匹配换行符,您只需要使用一个反斜杠。您正在使用字符串转义模式向字符串中插入换行符。regex没有看到——它看到了换行符,并与之匹配。您需要两个反斜杠,因为它不是字符串转义序列,而是regex转义序列。

当我思考这个问题时,我想到了为什么是这样的:regex是一个字符串,不管这个regex如何处理,它都会寻找一个单独的backslah作为转义符。然而,当regex作为字符串传递时,为了将其正确地放入字符串中,您还必须对backslah进行转义,这就是readon为什么需要两个反斜杠的原因。

您可以使用Pattern.quote(String)。

来自文档:

public static String quote?(String s)

Returns a literal pattern String for the specified String.

This method produces a String that can be used to create a Pattern that would match the string s as if it were a literal pattern.

Metacharacters or escape sequences in the input sequence will be given no special meaning.

你对String投入了什么价值?EDOCX1?1?

@Dannybulls从"一个简单的函数,它接受一个这样的字符串:[0-9],并返回转义的字符串\[0-9\]"。所以你给这个"[0-9]",它会返回相当于"\[0-9\]"的东西。(实际使用\Q和\E,但最终结果与Pattern.compile的效果相同。)

令人惊叹的。感谢您的快速帮助,即使9年后也是如此。)

您可以使用q和e特殊字符…自动转义q和e之间的任何字符。

\Q[0-9]\E

听起来有点流行,如果你问我,你试过Java(我没有,这就是为什么我问)。

它在Java中也是有效的:JavaSun.COM/JavaSe/6/DOCS/API/Java/UTL/ReGEX/Topn.HTML(用于"q"的CTRL F)

在Java字符串文字格式中,它将是"q[09] e"或"q"+正则表达式+"e"。但Quote()方法可以为您做到这一点,而且它可以正确处理已经包含e的字符串。

Pattern.compile()喜欢方括号。如果你拿着绳子

".{8},[0-9],[^0-9A-Za-z ],[A-Z],[a-z]"

然后用逗号分隔,最后得到五个完全有效的正则表达式:第一个匹配八个非行分隔符字符,第二个匹配一个ASCII数字,依此类推。除非你真的想匹配像".{8}"和"[0-9]"这样的字符串,否则我不明白你为什么需要逃避任何东西。

转载地址:https://blog.csdn.net/weixin_35600779/article/details/114715804 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:java中有错误咋能快速的改正_java抽象类错了 怎么改正
下一篇:java无法读取方案文档_解决Spring的java项目打包后执行出现“无法读取方案文档...“、“原因为 1) 无法找到文档; 2) 无法读取文档; 3) 文档的根元素不是...”问题...

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年04月20日 02时37分11秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章