RegEx:如何将字符集限制应用于整个表达式

时间:2019-06-17 10:10:30

标签: regex regex-lookarounds non-greedy

假设我有一个正则表达式,用于验证电子邮件地址,例如:

/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/

现在,假设我还想确保以下字符集也适用于整个字符串:

[\x00-\x7F]

如何将第二个字符集限制应用于整个模式。

结果将是:

  • jake.howlett@howlett.house(通过)
  • jake.howẟlett@howlett.house(失败,因为ẟ不在第二个字符集中)

1 个答案:

答案 0 :(得分:2)

您可以在检查字符串的开头后将其添加为正向查找:

  String _formatReferenceCode(String code){
    final list = code.split("");
    String part1 = list.sublist(0, 3).join();
    String part2 = list.sublist(3, 6).join();
    String part3 = list.sublist(6, 9).join();
    return "$part1-$part2-$part3";
  }

String result = _formatReferenceCode(referenceCode);

// it prints: "123-456-789"

^(?=[\x00-\x7F]+$)your_pattern_here ^^^^^^^^^^^^^^^^^ 检查字符串位置的开始之后,^将执行一次,并且要求整个字符串仅由ASCII字符组成(注意(?=[\x00-\x7F]+$)匹配1个或多个出现,+测试字符串位置的结尾。

正则表达式看起来像

$

请参见regex demo