gpt4 book ai didi

Java正则表达式双反斜杠转义特殊字符

转载 作者:行者123 更新时间:2023-12-02 09:07:09 25 4
gpt4 key购买 nike

我有一个正则表达式,已使用 RegexPal 进行了测试它在 RegexPal 中按预期工作,但在 Java 中不按预期工作。我知道这是由于字符被转义的方式造成的,但我不知道如何解决它。

我的表达式是:Pattern.compile("((([a-zA-Z0-9])([a-zA-Z0-9 ]*)\\?)+)").我在这里想做的是确定某个内容是否是目录的有效相对路径(目前仅在 Windows 中),因此它应该匹配“Hello”、“Hello World”、“Hello\World”等内容、“Hello World\foo\bar”等。相反,它仅在目录名称包含问号时才会匹配,例如。 “文件?”。我认为这是因为在我的表达式中,双反斜杠必须位于问号量词之前,但是当反斜杠被转义时 compile() 看到的是 \? 它假设是一个转义的问号。

有什么办法可以确保问号不被转义吗?我尝试在双反斜杠周围插入括号,但它只是转义右括号并导致“未闭合组错误”

最佳答案

使用 4 个反斜杠:

Pattern.compile("((([a-zA-Z0-9])([a-zA-Z0-9 ]*)\\\\?)+)")
^^^^
  1. 您需要匹配反斜杠字符:\
  2. 反斜杠是正则表达式的特殊字符(用于预定义的类,例如 \d),需要用另一个反斜杠进行转义:\\
  3. 由于 Java 将字符串文字用于正则表达式,并且反斜杠也是字符串文字的特殊字符(例如用于换行符 \n),因此每个反斜杠需要由另一个反斜杠转义反斜杠:\\\\.

关于Java正则表达式双反斜杠转义特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34071581/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com