多个正则表达式

时间:2012-05-08 11:28:09

标签: java regex

我不习惯他们,并且遇到java语法“匹配”的问题。

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

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

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

不起作用。

怎么做?

2 个答案:

答案 0 :(得分:6)

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

这意味着,对于java,你的表达式是"match any of: [1-to-9 [or x, or m, or l [or *any*]]]"(*任何*这里是因为你没有逃脱.,因为它会创建a match any character }命令)


重要的:

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

当你不习惯它时,这有点令人困惑,但总而言之,要向匹配器发送一个实际的“\”以匹配,你可能需要使用“\\\\”!第一个“\\”将成为匹配器的“\”,因此是一个scape角色,第二个“\\”,由第一个转义,将成为实际的“\”字符串!


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

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

要进一步学习,请阅读Java's Pattern docs.

答案 1 :(得分:1)

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

应该这样做。

  • [1-9.]+匹配1到9和/或句点之间的一个或多个数字。 (+表示“一个或多个”,*表示“零或更多”,?表示“零或一个”。)
  • \.xml匹配.xml。由于.在正则表达式中表示“任何字符”,因此如果您希望它表示文字句点,则需要将其转义:\.(因为这是在Java字符串中,所以反斜杠本身需要被加倍逃脱)。
相关问题