【问题标题】:escape apostrophe in a regex string that starts and ends with apostrophe in dart在 dart 中以撇号开头和结尾的正则表达式字符串中转义撇号
【发布时间】:2018-12-23 02:30:47
【问题描述】:

我正在尝试为电子邮件地址创建正则表达式匹配,并打算在 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"" 创建正则表达式字符串。

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

final String a = 'foo\'bar';

但是使用final String a = r'foo\'bar' 我得到一个错误。我怎样才能正确地逃避呢?

谢谢

【问题讨论】:

标签: regex dart


【解决方案1】:

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

【讨论】:

  • 所以我可以将一个带有“'”的原始字符串与另一个原始字符串连接起来,对吗?有更好的方法吗?
  • 是的,您可以连接两个或多个使用不同分隔符的原始字符串。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-26
  • 1970-01-01
  • 2017-01-29
  • 2018-07-18
  • 1970-01-01
  • 1970-01-01
  • 2013-08-04
相关资源
最近更新 更多