【问题标题】:Regex to Match: !$%^&*()_+|~-=`{}[]:";'<>?,./要匹配的正则表达式:!$%^&*()_+|~-=`{}[]:";'<>?,./
【发布时间】:2013-01-09 05:16:30
【问题描述】:

我知道这是一个几乎同名的问题的副本,但是,我无法让它在 Android 中运行!

我正在尝试这个:正则表达式匹配符号:

public Pattern bsymbols = Pattern.compile("[-!$%^&*()_+|~=`{}\\[\\]:\\";'<>?,.\/]");

但是,这不起作用。有谁知道应用这种模式的正确方法吗?

附:完成正则表达式的菜鸟。 :D

从这里开始 - Regex to Match Symbols: !$%^&*()_+|~-=`{}[]:";'<>?,./

错误信息:Syntax error on token(s), misplaced construct(s)

更新:添加了额外的反斜杠...修复了很多 em,现在从 ; 开始出现错误。使用 Eclipse。

【问题讨论】:

  • 又是反斜杠的问题吗? (当反斜杠是您的编程语言中的字符串文字转义时,应使用两个反斜杠将 一个 反斜杠传递给正则表达式引擎)
  • @RohitJain 在 Eclipse 中不断加下划线表示错误。
  • @Asryael.. 这个错误信息在这里会很有帮助。
  • 如果你想指定一个 \ 如果它不是根据语言的转义序列的一部分,则使用 \\。
  • IntelliJ IDEA 对正则表达式有很好的支持(语法高亮 + 即时匹配用户输入)。

标签: java android regex


【解决方案1】:

我认为你的问题是“

public Pattern bsymbols = Pattern.compile("[-!$%^&*()_+|~=`{}\[\]:";'<>?,.\/]");
                                                                  ^

它正在结束你的字符串,所以你应该转义它。另外你需要删除斜线之前的反斜线,它不是特殊字符。

public Pattern bsymbols = Pattern.compile("[-!$%^&*()_+|~=`{}\\[\\]:\";'<>?,./]");

好的,再一次,你想匹配反斜杠,而不是转义斜杠,那么我们就到这里了:

public Pattern bsymbols = Pattern.compile("[-!$%^&*()_+|~=`{}\\[\\]:\";'<>?,.\\\\/]");

现在它的答案与 jdb 的答案相同,因此对他 +1 表示更快。

【讨论】:

  • 还需要双重转义\[\]
  • @stema 需要什么转义;
  • 在复制粘贴你的表情后仍然没有得到任何爱。 - Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \\ )
  • 你需要 esape '()' '.' “?” '+' '*' '|' '{}' '[]' 因为它们都是正则表达式中的特殊字符,您必须在java中使用双反斜杠来转义字符
  • @AdamL.Mónos 除了[、\ 和] 之外的每个特殊字符都是字符类中的字符本身。
【解决方案2】:

怎么样?

Pattern.compile("[-!$%^&*()_+|~=`{}\\[\\]:\";'<>?,.\\\\/]");

【讨论】:

  • 您不需要在字符类中转义 ()
【解决方案3】:

在一个字符类中,只有[]有特殊含义,所以需要对它们进行转义。此外,在 Java 中,您需要使用额外的反斜杠进行转义。这就是 Java 特有的问题。因此,您需要使用\\[\\]。是的,您需要在字符串文字中使用单个反斜杠转义 "

除此之外,连字符在中间某处使用时也有特殊含义。如果要匹配hyphen,则需要在末尾使用它。

其余字符,不需要转义。他们只是普通的角色。

所以,你的模式应该是这样的:-

Pattern bsymbols = Pattern.compile("[-!$%^&*()_+|~=`{}\\[\\]:\";'<>?,./]");

如果你也想匹配backslash (\),那么使用这个:-

Pattern bsymbols = Pattern.compile("[-!$%^&*()_+|~=`{}\\[\\]:\";'<>?,.\\\\/]");

【讨论】:

  • 感谢您的回答,它适用于列出的字符,但是如果我是正确的,您将缺少反斜杠字符。
  • \ 也应该在字符类中转义。
  • @Asryael .. 是的,补充说。我以为你用它来逃避 / 。但要匹配 反斜杠,您需要使用四个反斜杠。两个用于正则表达式,两个用于 Java。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-30
  • 2011-05-01
相关资源
最近更新 更多