这种正则表达式语法在Java中实际意味着什么?

时间:2015-10-11 03:48:18

标签: java regex palindrome

我写了一个程序来检测回文。它适用于我所拥有的,但我偶然发现了另一种语法,我想知道它究竟意味着什么?

这是我正在使用的代码行:

    userString = userString.toLowerCase().replaceAll("[^a-zA-Z]", "");

据我所知,replaceAll代码段意味着“匹配a-z和A-Z(a-zA-Z)范围内不是(^)的字符([...]。”

然而,这也有效:

    replaceAll("[^(\p{L}')]", "");

我只是不明白如何将其翻译成英文。我对正则表达式完全陌生,我发现它们非常吸引人。感谢任何能告诉我这意味着什么的人。

2 个答案:

答案 0 :(得分:2)

你应该查看这个网站: https://regex101.com

当我编写/测试/调试一些正则表达式时,它对我帮助很大;)

它给出了以下解释:

[^(\p{L}')]匹配下面列表中不存在的单个字符:

  • (文字(
  • \p{L}匹配来自任何语言的任何类型的信件
  • ')列表')中的单个字符

答案 1 :(得分:-1)

两个正则表达式不一样:

  • [^a-zA-Z]匹配任何字母而非英文字母
  • [^(\p{L}')]匹配任何字母,引号或括号

即第二个也删除了括号和引号。

正则表达式\p{L}是"任何字母"的posix字符类。 IE这两个正则表达式只相当于英文字母的上下文:

  • [a-zA-Z]
  • \p{L}