Java中的自定义正则表达式

时间:2018-06-06 08:33:55

标签: android regex

我必须实现一个检查字符串是否符合正则表达式的函数,我编写了一个解析文件名列表的方法,我需要检查每个文件名是否尊重正则表达式。

文件名的组成如下(仅作为示例):

  • verbale.pdf.001.001

  • image.jpg.002.001

字符串始终由:

组成

扩展程序(仅限jpg或pdf)“一组三个数字”< strong>一组三个数字

有了这个正则表达式,我需要检查输入端的字符串是否如上所述,我目前已经实现了这个:

Pattern rexExp = Pattern.compile("((\\.jpg)|(\\.pdf))\\.[0-9]{3}\\.[0-9]{3}");

但是不能正常工作,实现一个regExp以检查文件名是否以某个路径结束是个好主意吗?

3 个答案:

答案 0 :(得分:2)

比其他答案少贪心,认为它适合你:

\\w+\\.(jpg|pdf)(\\.\\d{3}){2}
  • 文件名,仅由字母,数字和_
  • 组成
  • jpg或pdf格式
  • 另一个点
  • 三位数
  • 点和三位数字重复

答案 1 :(得分:1)

这应该有效:

[
  {
    "conversion_month": "2017-08",
    "children": [
      {
        "channel": "DISPLAY",
        "children": [
          {
            "sub_channel": "Retargeting",
            "children": [
              {
                "campaign": "Summer_Campaign",
                "children": [
                  {
                    "Id": "200278217",
                    "children": [
                      {
                        "cost": "2.286261"
                      },

。* =任何字符(例如“verbale123”)

\\ w {3} =任意3个字母\数字字符

\\。 =一个点

\\ d {3} =任意三个数字字符

答案 2 :(得分:1)

要检查字符串是以pdf还是jpg结尾,还是两个.和3位数序列,您可以使用

(?i)(?:jpg|pdf)(?:\.[0-9]{3}){2}$

请参阅regex demo

<强>详情

  • (?i) - 不区分大小写的标记
  • (?:jpg|pdf) - jpgpdf
  • (?:\.[0-9]{3}){2} - 重复.和3位数
  • $ - 字符串结束。

Matcher#find()一起使用(因为matches()锚定字符串开头和结尾的匹配,而使用此模式时需要部分匹配),example demo

String s = "verbale.pdf.001.001";
Matcher matcher = Pattern.compile("(?i)(?:jpg|pdf)(?:\\.[0-9]{3}){2}$").matcher(s);
if (matcher.find()){
    System.out.println("Valid!"); 
}