要求:
如果在句子中找到模式 57XXXXXXX 或 57XXXXXXX-X ,则复制此匹配模式( X - 表示7个整数且 57 必须是常数值),否则忽略完整句子。
我写了一个正则表达式模式57[0-9]{7}|-[0-9]{1}
来匹配这两个模式。
如果找到低于模式(57后的8位而不是7,那么仍然高于正则表达式仍然会得到匹配的模式(实际上期望正则表达式不匹配)
例如5712345678-0(57之后,8位数字) - >正则表达式匹配并给出571234567-0
使用java编译上面的模式。
答案 0 :(得分:5)
你可以试试这个:
\b57\d{7}(?:-\d)?\b
这是它的样子:
在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