正则表达式模式匹配特定的数字模式,跳过,如果有不同的模式

时间:2013-08-19 00:19:24

标签: java regex

要求:

如果在句子中找到模式 57XXXXXXX 57XXXXXXX-X ,则复制此匹配模式( X - 表示7个整数且 57 必须是常数值),否则忽略完整句子。

我写了一个正则表达式模式57[0-9]{7}|-[0-9]{1}来匹配这两个模式。

如果找到低于模式(57后的8位而不是7,那么仍然高于正则表达式仍然会得到匹配的模式(实际上期望正则表达式不匹配)

例如5712345678-0(57之后,8位数字) - >正则表达式匹配并给出571234567-0

使用java编译上面的模式。

3 个答案:

答案 0 :(得分:5)

你可以试试这个:

\b57\d{7}(?:-\d)?\b

这是它的样子:

Regular expression visualization

在Java中,那将是Pattern.compile("\\b57\\d{7}(?:-\\d)?\\b")

答案 1 :(得分:1)

差别不大但允许字母和下划线:

(?:(?<=[^0-9])|^)57[0-9]{7}(?:-[0-9])?(?:(?=[^0-9])|$)

答案 2 :(得分:1)

在这种情况下,您可以使用前瞻断言。

57\d{7}(?:-\d)?(?!\d)

正则表达式:

57              '57'
 \d{7}          digits (0-9) (7 times)
     (?:        group, but do not capture:
       -        '-'
       \d       digits (0-9)
     )?         end of grouping
      (?!       look ahead to see if there is not:
        \d      digits (0-9)
      )         end of look-ahead

或者:

(?:57\d{7})(?:-\d)?(?!\d)

正则表达式:

(?:             group, but do not capture:
  57            '57'
   \d{7}        digits (0-9) (7 times)
)               end of grouping
 (?:            group, but do not capture
   -            '-'
    \d          digits (0-9)
 )?             end of grouping
  (?!           look ahead to see if there is not:
    \d          digits (0-9)
  )             end of look-ahead