【问题标题】:Java Regex to Flutter RegexJava 正则表达式到 Flutter 正则表达式
【发布时间】:2022-02-03 12:10:24
【问题描述】:

我正在尝试将 Java 正则表达式转换为 Flutter(Dart) 正则表达式,但我遇到了问题。

我的 Java 代码和正则表达式示例,女巫返回匹配:

    public static void main(String[] args) {
    String EMAIL_VALIDATION_REGEX = "^[a-zA-Z0-9_+&*-]+(?:\\.[a-zA-Z0-9_+&*-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,7}$";
    String email = "testemail@gmail.com";
    if(!Pattern.matches(EMAIL_VALIDATION_REGEX, email)) {
        System.out.println("Not matching!");
    }else {
        System.out.println("Matching!");
    }
}

我的 Flutter 代码示例女巫返回 Not Matching:

    final RegExp _emailRegex = RegExp(
    r"^[a-zA-Z0-9_+&*-]+(?:\\.[a-zA-Z0-9_+&*-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,7}$",
    caseSensitive: false,
    multiLine: false);

final String _email = "testemail@gmail.com";

if (!_emailRegex.hasMatch(_email)) {
  print("Not Matching!");
} else {
  print("Matching!");
}

我基本上复制了我在 java 中使用的正则表达式并添加了 r 作为前缀。有人可以帮我找出这段代码的问题吗?

【问题讨论】:

    标签: java regex flutter dart


    【解决方案1】:

    r 前缀创建一个原始字符串。 因此,您不需要双重转义 \\. 序列。使用单个反斜杠:\.

    https://api.flutter.dev/flutter/dart-core/RegExp-class.html

    注意示例中使用了原始字符串(以 r 为前缀的字符串) 以上。使用原始字符串将字符串中的每个字符视为 文字字符。

    还有https://www.learndartprogramming.com/fundamentals/strings-and-raw-strings-in-dart/

    什么是 Dart 中的原始字符串:在 Dart 编程语言中,原始字符串是一种字符串类型,其中特殊字符(如 \)不会得到特殊处理。

    当你想定义一个包含很多特殊字符的字符串时,原始字符串很有用。

    当您定义复杂的正则表达式时,原始字符串也很有用,否则使用单引号和双引号很难定义。

    使用带有正则表达式的原始字符串的主要优点是,与 Java 不同,您可以复制和粘贴您的正则表达式并在其他工具(例如 https://www.regexr.com)中轻松对其进行测试,而无需担心额外的转义。

    【讨论】:

      猜你喜欢
      • 2016-09-28
      • 2012-01-16
      • 1970-01-01
      • 2015-12-29
      • 2013-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多