正则表达式字符串中的转义撇号,以飞镖中的撇号开头和结尾

时间:2018-12-22 17:56:12

标签: regex dart

我正在尝试为电子邮件地址创建正则表达式匹配项,并且打算在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])+)\])

现在我真的是飞镖新手,但我了解我可以使用r''r""创建正则表达式字符串。

现在使用飞镖,我可以使用\来转义字符,因此,如果我想转义以撇号开头和结尾的字符串中的撇号,我可以这样做:

final String a = 'foo\'bar';

但使用final String a = r'foo\'bar'时出现错误。我该如何正确地逃避呢?

谢谢

1 个答案:

答案 0 :(得分:3)

否,r''并不表示“正则表达式”。 It means "raw",因此反斜杠被解释为文字反斜杠,而不是转义字符。

对于通常包含很多反斜杠的字符串(例如正则表达式模式),不必逃避每个反斜杠很有用。

正则表达式创建为RegExp class的实例。

您可以连接使用不同定界符的原始字符串来为整个模式创建单个字符串。就您而言,这应该可以工作:

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);