使用模式匹配String的内容

时间:2010-12-17 12:12:38

标签: java regex string

我正在努力创建一个与String的matches()方法一起使用的正则表达式匹配模式。 我的字符串值类似于 -

3012145A_20348409-146139460.ABCDxyzPQr.1.1.xml

我正在使用String.matches(“regex”)方法,但说实话,正在努力创建与这些字符串值匹配的模式。 我确实尝试了几种不同的组合但是徒劳无功。在互联网上搜索了一些例子。 虽然长度可能会有所不同,但值总是采用相似的格式。

非常感谢任何帮助。


只需匹配.xml即可 好吧,除了给出的例子,列表中也会有其他值,所以我需要匹配

3012145A_20348409-146139460.ABCDxyzPQr.1.1.xml  

值列表可能类似于 -

3012145A_20348409-146139460.ABCDxyzPQr.1.1.xml
3012145_Error.xml
3012145_UK.pdf
3012145A_20348409.ABC.10.10.10.xml

我需要这些

中的第一个值
(alphanum)(underscore)(num)(hyphen)(num)(dot)(aLpHa)(dot)(num)(dot)(num)(dot)(.xml)  

我试过了 -

s.matches("[a-zA-Z0-9]_[0-9]-[0-9].[a-zA-Z].[0-9].[0-9].xml");

2 个答案:

答案 0 :(得分:3)

要求:

(alphanum)(underscore)(num)(hyphen)(num)(dot)(aLpHa)(dot)(num)(dot)(num)(dot)(.xml)

假设正则表达式:

\w*_\d*-\d*\.([a-zA-Z])*\.\d*\.\d*(\.)?\.xml

在java中,这将转换为:

Pattern p = Pattern.compile("\\w*_\\d*-\\d*\\.([a-zA-Z])*\\.\\d*\\.\\d*(\\.)?\\.xml",Pattern.CASE_INSENSITIVE);

注意

当我使用[a-zA-Z]时,您可能不需要Pattern.CASE_INSENSITIVE

你的正则表达式问题:s.matches("[a-zA-Z0-9]_[0-9]-[0-9].[a-zA-Z].[0-9].[0-9].xml");

您正在寻找alphanumberalphanumeric的单个实例。使用*+元字符。

希望得到这个帮助。

答案 1 :(得分:0)

光辉!非常感谢Favonius 这很有效。
据我所知,我正在做的是即使我给出一个范围[0-9a-zA-Z],它实际上只是尝试匹配第一个字符,在我的例子中,3。 所以实际上而不是3012145A它只是检查3是否是我给定范围([0-9a-zA-Z])的一部分,等等对整个字符串。
您的解决方案\w*会检查该特定部分是否为字母数字,或\d*将检查该部分(由边界限定,例如._)是否在整个范围内数字和/或字母。

因此,匹配3012145A_的方式非常模糊

[0-9][0-9][0-9][0-9][0-9][0-9][0-9][a-zA-Z]_

我不是在试图理解[0-9]\d*之间的行为和差异而提出此解决方案。

我仍然有一个问题,(\\.)?\\.的意义,这是什么目的。

再次感谢