我建立了一个正则表达式,应该匹配有效的HTTP标头。它可以在regexr上运行:https ://regexr.com/4pnk9 ,与regex一起使用^([\w\-])+:(?!\s*$).+$。我正在使用全局,多行和不区分大小写的标志(gim)。
^([\w\-])+:(?!\s*$).+$
但是,当我在Flutter项目中实现它时,它什么都不匹配。除此之外,Dart没有提供在RegExp中启用全局功能的方法。
谁能解释我为什么该正则表达式可以在regexr.com上运行,但不能在我的Dart测试中使用吗?
class Validators { static final RegExp _headerFieldsRegExp = RegExp( "^([\w\-])+:(?!\s*\$).+\$", multiLine: true, caseSensitive: false); static bool headerFieldsValid(String headerFields) { if (headerFields == null || headerFields.length == 0) { return false; } String match = _headerFieldsRegExp.stringMatch(headerFields); if (match == null) { return false; } return headerFields.length == match.length; } } void main() { test('Test validating header fields', () { String valid1 = 'Accept: json\nAuthorization: Bearer 12345'; expect(true, Validators.headerFieldsValid(valid1)); String valid2 = 'Accept: json\nAuthorization: Bearer 12345\n'; expect(true, Validators.headerFieldsValid(valid2)); String invalid1 = 'Accept: json\nAuthorization:\n'; expect(false, Validators.headerFieldsValid(invalid1)); String invalid2 = 'Accept: json\n\nAuthorization: Bearer 12345\n'; expect(false, Validators.headerFieldsValid(invalid2)); }); }
您可以使用
r"^([\w-])+:(?!\s*$).+$"
要么
"^([\\w-])+:(?!\\s*\$).+\$"
请注意,在非原始字符串文字中,双反斜杠代表单个文字反斜杠。在原始字符串文字中,您无需转义$符号,而只需要一个反斜杠即可形成正则表达式转义。
$