0

我不习惯它们,并且对 java 语法“匹配”有问题。

我有两个文件一个是111.123.399.555.xml另一个是Conf.xml.

现在我只想用正则表达式获取第一个文件。

string.matches("[1-9[xml[.]]]");

不工作。

这该怎么做?

4

2 回答 2

6

使用string.matches("[1-9[xml[.]]]");将不起作用,因为[]将创建一个字符类组,而不是一个捕获组。

这意味着,对于 java,您的表达式是在说"match any of: [1-to-9 [or x, or m, or l [or *any*]]]"(*any* 这里是因为您没有转义.,并且它会创建a match any character命令)


重要的:

"\" 被 java 识别为文字转义字符,并且为了将其作为实际匹配器的转义字符(也是 "\",但以字符串形式)发送到匹配器,它本身需要被转义,因此,当你的意思是在匹配器上使用“\”,你必须实际使用“\\”。

当您不习惯时,这有点令人困惑,但总结一下,要发送一个实际的“\”以匹配匹配器,您可能必须使用“\\\\”!第一个“\\”将成为匹配器的“\”,因此是一个转义字符,第二个“\\”被第一个转义,将成为实际的“\”字符串!


###.###.###.###.xml与“#”始终为数字的模式匹配的正确模式字符串是string.matches("(\\d{3}\\.){4}xml"),其工作原理如下:

  • =将\\d匹配单个数字字符。它与 using 相同[0-9],只是更简单。
  • 指定匹配前一个的{3}“恰好 3 次” \\d。从而匹配###
  • \\.匹配单个点字符。
  • 附上前面的()代码对匹配器说“这是一个捕获组”。它被 next 使用{4},因此创建了一个“完全匹配整个###.组 4 次”,从而创建了“匹配###.###.###.###.”。
  • 最后,xml模式字符串结束之前的将完全匹配“xml”,与前面的项目一起,完全匹配该模式:“ ###.###.###.###.xml”。

如需进一步学习,请阅读Java 的 Pattern 文档。

于 2012-05-08T12:19:42.557 回答
1
string.matches("[1-9.]+\\.xml")

应该这样做。

  • [1-9.]+匹配 1 到 9 和/或句点之间的一位或多位数字。(+意思是“一个或多个”,*意思是“零个或多个”,?意思是“零个或一个”)。
  • \.xml匹配.xml。由于.在正则表达式中表示“任何字符”,因此如果您希望它表示文字句\.点,则需要对其进行转义:(并且由于这是在 Java 字符串中,反斜杠本身需要通过加倍进行转义)。
于 2012-05-08T11:29:40.053 回答