【问题标题】:What does the _ in [a-zA-Z0-9_] mean?[a-zA-Z0-9_] 中的 _ 是什么意思?
【发布时间】:2009-10-21 22:57:27
【问题描述】:

以下正则表达式中的下划线是什么意思?

[a-zA-Z0-9_]

_ 似乎没有什么区别,所以我不明白它的目的。

【问题讨论】:

  • 顺便说一句,[a-zA-Z0-9_] == \w
  • 请参阅perlreperlref。是的,我刚刚对“RTFM”说。
  • Tordek: \w 取决于语言环境,也会匹配 Unicode 字符
  • 有人说在 Perl 5.12 中将\w 更改为始终表示[a-zA-Z0-9_]

标签: regex perl


【解决方案1】:

下划线表示下划线。

【讨论】:

  • 尽我所能,我找不到你的陈述有任何问题;它非常简单,逻辑无可非议:-) +1
  • 如何获得声望教程。
【解决方案2】:

表示除小写字母、大写字母、数字外,还要匹配下划线字符。

【讨论】:

  • aaah 如果你只使用一点你的大脑 a-z A-Z 0-9 会容易得多:D
【解决方案3】:

正则表达式记录在perlre 中。每当您对正则表达式有疑问时,都可以在这里查看。 Regular-Expressions.info 网站也很有帮助。

为了让您入门,您正在查看的内容称为“字符类”。字符类中的任何字符都可以匹配。

您可以使用- 组成一个字符范围,因此a-z 是该范围内的任何小写字母。 A-Z 是大写字母,0-9 是数字。 _ 是文字下划线。这些是 Perl 标识符(变量名等)的合法字符。那是 ASCII 意义上的 \w 字符类(而不是扩展的 Unicode 意义上的)。

人们经常使用它来匹配 Perl 变量名,但有一条规则人们忘记了。用户定义名称的第一个字符必须是字母或下划线(不是数字)。这意味着您应该为首字母使用不同的字符类:

 [A-Za-z_][A-Za-z0-9_]*

【讨论】:

  • 谢谢。除非我们所有人都对新手如此宽容。
  • 对于 Perl 正则表达式的新手,我总是首先推荐perldoc perlrequick。它比perldoc perlre 友好得多——主要是因为它没有那么详细。
【解决方案4】:

表示下划线也匹配。

【讨论】:

    【解决方案5】:

    除了字符序列([.[:[=)、范围表达式(例如,[a-z])和开头的抑扬符([^),every 括号表达式中的字符表示字符本身,就像那个下划线一样。

    附带说明,该表达式通常由 \w(单词字符,忽略 unicode 和区域设置)表示,并且通常用于定义允许在变量名中使用的字符集。

    【讨论】:

    • 对于大多数语言,[a-zA-Z_][a-zA-Z0-9_]* 对于变量名可能更准确,因为它们禁止以数字开头。
    • 现在许多语言也允许使用其他脚本来命名变量。所以也可以享受 Unicode 类的乐趣 :-)
    猜你喜欢
    • 1970-01-01
    • 2019-05-03
    • 2011-09-29
    • 1970-01-01
    • 2018-08-27
    • 1970-01-01
    • 2019-09-06
    • 2015-01-07
    • 1970-01-01
    相关资源
    最近更新 更多