我不习惯他们,并与Java语法“匹配”的麻烦。多个正则表达式
我有两个文件一个是111.123.399.555.xml
另一种是Conf.xml.
现在我只希望得到使用正则表达式的第一个文件。
string.matches("[1-9[xml[.]]]");
没有用。
如何做到这一点?
我不习惯他们,并与Java语法“匹配”的麻烦。多个正则表达式
我有两个文件一个是111.123.399.555.xml
另一种是Conf.xml.
现在我只希望得到使用正则表达式的第一个文件。
string.matches("[1-9[xml[.]]]");
没有用。
如何做到这一点?
使用string.matches("[1-9[xml[.]]]");
将不起作用,因为[]
将创建一个字符类组,而不是一个捕获组。
这意思是说,去渣,你的表情是说"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.
string.matches("[1-9.]+\\.xml")
应该这样做。
[1-9.]+
与1和9和/或句点之间的一个或多个数字匹配。 (+
表示“一个或多个”,*
表示“零个或多个”,?
表示“零个或一个”)。\.xml
比赛.xml
。由于.
意味着正则表达式中的“任何字符”,如果您希望它意味着一个文字周期:\.
(因为它位于Java字符串中,所以反斜杠本身需要加倍转义),您需要转义它。
你想'/([1-9] {3} \。){4} XML /'? – Bergi
我写了一篇[博客文章](http://xisb.wordpress.com/2012/05/09/what-absolutely-every-programmer-should-know-about-regular-expressions/)给出一个真实的简要概述在正则表达式上,绝对基本的,每个人都应该知道。也许它可以帮助你了解更多细节。 – stema