为什么正则表达式模式匹配“|”在下面显示的代码?

时间:2014-03-03 10:56:02

标签: java regex

确定。我知道我错过了什么。我只是无法找出我所缺少的东西。下面提到的模式匹配“|”我不知道为什么。有人可以解释一下。谢谢。 我想匹配一个角色。字符集是{,},[,],|,?等

public static void main(String[] args) {
    String str = "";
    if (str.matches("[\"|`|+|,|;|<|>|?|\\[|\\]|{|}|']"))
        System.out.println("matches");

}

4 个答案:

答案 0 :(得分:3)

当您使用[]语法时,您正在使用()来启动和结束表达式。方括号允许您列出一堆匹配的字符,|多次出现在列表中。括号中设置了一个分组,您可以使用|来表示“或”。

我认为您的解决方案是删除|。你不要将方括号内的字符与任何东西分开,只需将它们全部列出即可。

答案 1 :(得分:2)

您不需要在正则表达式中使用|符号,因为您正在使用要匹配的字符数组。基本上,如果你想匹配某些东西a,b,c or d,这意味着字符串可以包含任何这些字母,你可以简单地做

String pattern = "[abcd]*"; // * means they can be repeated, for example "aabdcb"
str.matches(pattern);

无需使用管道。另一方面,如果你想严格说一个字符串是a or b,你可以使用像

这样的模式
pattern = "(a)|(b)"; // matches either "a" or "b"

希望这能为你解决一些问题。

您可能需要查看this page以了解有关在正则表达式中使用管道的更多信息。

答案 2 :(得分:0)

简而言之,您在[]括号中提供了 |

方括号[]内的任何字符都将匹配。

删除大括号内的所有 |

答案 3 :(得分:0)

您正在混淆两种指定替代方法的方式:

选择一个。