我正在尝试为电子邮件地址创建正则表达式匹配,并且打算在 dart 应用程序中使用它。
我为此找到了以下正则表达式:
(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])
Run Code Online (Sandbox Code Playgroud)
现在我对 dart 真的很陌生,但我知道我可以使用r''or创建正则表达式字符串r""。
现在使用 dart 我可以转义字符,\所以如果我想转义以撇号开头和结尾的字符串中的撇号,我可以这样做:
final String a = 'foo\'bar';
Run Code Online (Sandbox Code Playgroud)
但是final String a = r'foo\'bar'我得到了一个错误。我怎样才能正确逃脱?
谢谢你
不,r''并不意味着“正则表达式”。它的意思是"raw",所以反斜杠被解释为文字反斜杠,而不是转义字符。
不必转义每个反斜杠对于通常包含大量反斜杠的字符串很有用,例如正则表达式模式。
正则表达式是作为RegExp 类的实例创建的。
您可以连接使用不同分隔符的原始字符串来为整个模式创建单个字符串。在您的情况下,这应该有效:
String pattern = r"(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|" + r'"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])';
RegExp exp = new RegExp(pattern);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1604 次 |
| 最近记录: |