【问题标题】:When should I use \A in a regex?我什么时候应该在正则表达式中使用 \A?
【发布时间】:2010-04-23 14:55:26
【问题描述】:

行尾锚$匹配即使在匹配的字符串中有额外的尾随\n,所以我们使用\Z而不是$

例如

^\w+$ 将匹配字符串 abcd\n^\w+\Z 不匹配

\A 怎么样以及何时使用?

【问题讨论】:

  • 你不是说^\w+\z(小写z)吗? \Z$ 是相同的(当您不使用 /m 修饰符时)。
  • @cjm,我在 python 上测试过,恕我直言,它不一样,^\w+\Z 不匹配 abcd\n,但 $ 匹配,但我不确定 @987654335 的 python 和 perl 正则表达式实现@ 是不同的,但在 python 中 \Z\z 是相同的,(我认为是因为我在 python 文档中没有看到 \z),我目前没有 perl。
  • @cjm,我刚刚在codepad.org上测试过,是的,python中的\Z我的意思是perl中的\z,我认为它们在两种语言中都是一样的。

标签: regex


【解决方案1】:

最常用于启用多行匹配时。由于 \A 仅匹配整个文本的开头,而不是仅匹配行开头,因此在可以跨行匹配的正则表达式中,^\A 的功能是不同的。

【讨论】:

  • +1 谢谢,但人们真的在使用它吗?删除/m 和使用^ 不是相同的行为吗?
  • 是的,我使用它。考虑尝试搜索您希望没有嵌入换行符但用户将它们放入的字符串。您希望能够搜索整个字符串但 ^ 和 $ 会混淆并且只扫描字符串的第一部分.您最终可能会在查询中注入一些恶意代码或将其存储在数据库中。是的,这很令人困惑,但是 \m、\A、\z、^ 和 $ 有它们的用途,因此您需要了解何时何地使用它们。也许这不是一个很好的例子,但它可能非常重要。也许有人可以添加一些真实世界的例子。
  • 如果您尝试在一组日志中匹配日志文件开头的特定行,则需要启用多行匹配,但不能t 只使用^(因为您想匹配日志文件开头的行,而不是中间的行)。这将是一个潜在的用例。
【解决方案2】:

与任何正则表达式功能一样,您可以在它更准确地描述您的需求时使用它,而不是任何更一般的功能。如果您知道要在字符串的开头(而不是逻辑行)完全匹配,请使用描述它的正则表达式功能。不要使用在您不想要的情况下可能匹配的正则表达式功能。

对于 Perl,有关零宽度断言的详细信息,请参阅 perlre 文档:

\b  Match a word boundary
\B  Match except at a word boundary
\A  Match only at beginning of string
\Z  Match only at end of string, or before newline at the end
\z  Match only at end of string
\G  Match only at pos() (e.g. at the end-of-match position
    of prior m//g)

【讨论】:

    【解决方案3】:

    根据您使用的标签,与您的问题没有直接关系,但至少有一种语言 (Ruby),其中 ^$ 总是 表示行首/行尾,所以如果你想匹配字符串的开始/结束,你必须使用\A\Z\z

    如果您想保持正则表达式的可移植性,最好明确说明您希望它们做什么,而不是依赖于模式修饰符的可用性,例如 \mRegex.MULTILINE 等。

    另一方面,JavaScript、POSIX 和 XML 不支持 \A\Z。这就是像RegexBuddy 这样的工具派上用场的地方,可以为您将正则表达式从一种风格转换为另一种风格。

    【讨论】:

    • 感谢您提供有关 ruby​​ 正则表达式的信息,+1
    【解决方案4】:

    如果您使用的正则表达式支持\A,那么我建议您始终使用它而不是^\A 始终仅在支持它的所有风格中匹配字符串的开头。换行没有问题。

    ^ 可能仅匹配字符串的开头或任何行的开头,具体取决于正则表达式风格和正则表达式选项。

    通过使用\A,您可以减少在其他人必须维护您的代码时造成混淆的可能性。

    【讨论】:

    • 感谢 Jan Goyvaerts 的建议,这很有道理
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-18
    • 1970-01-01
    • 2012-07-24
    相关资源
    最近更新 更多