我正在努力创建一个与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");
答案 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");
您正在寻找alpha
,number
或alphanumeric
的单个实例。使用*
或+
元字符。
希望得到这个帮助。
答案 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*
之间的行为和差异而提出此解决方案。
我仍然有一个问题,(\\.)?\\.
的意义,这是什么目的。
再次感谢