2

要求:

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

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

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

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

使用 java 编译上述模式。

4

3 回答 3

5

你可以试试这个:

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

这是它的样子:

正则表达式可视化

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

于 2013-08-19T00:20:49.390 回答
1

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

(?:(?<=[^0-9])|^)57[0-9]{7}(?:-[0-9])?(?:(?=[^0-9])|$)
于 2013-08-19T00:35:32.117 回答
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
于 2013-08-19T02:18:39.627 回答