【发布时间】:2017-09-01 02:11:17
【问题描述】:
tl;dr:如何在正则表达式中对特定标记设置计数约束。
(regex-exp){constraint:max 10 only digits}
我一直在尝试在文本块中查找电话号码。 Android 平台Patterns 类提供了合理的覆盖范围。但它有它的主要问题
- 没有最小长度
- 它没有最大长度
所以它实际上甚至匹配1234,并且当有像my phone numbers are +19447223311 872881122 这样的字符串时,它会将两个数字作为一个数字匹配。如果我们可以添加一个模式应该有数字 {7,12} 的约束,我猜它会解决这两个问题。尽管我尝试了很多都无法使其工作。
这是该模式的正则表达式。
public static final Pattern PHONE
= Pattern.compile( // sdd = space, dot, or dash
"(\\+[0-9]+[\\- \\.]*)?" // +<digits><sdd>*
+ "(\\([0-9]+\\)[\\- \\.]*)?" // (<digits>)<sdd>*
+ "([0-9][0-9\\- \\.]+[0-9])"); // <digit><digit|sdd>+<digit>
【问题讨论】:
-
电话号码实际上没有最大长度。如果拼写某些东西,一些公司尤其会使用额外的数字,因为额外的数字会被忽略
-
@GabeSechan 也许是的。但就我而言,我想知道如何对正则表达式施加计数约束。 :-\
-
另一个问题是 rehex 不是正确的工具。解析电话号码的语言不规范。
-
重点不在实体“电话号码”上。如何根据特定令牌的计数向正则表达式添加约束
标签: java android regex regex-negation regex-lookarounds