【问题标题】:Does \W include the carriage return (\r) or line feed (\n) characters?\W 是否包含回车 (\r) 或换行 (\n) 字符?
【发布时间】:2013-03-02 21:34:13
【问题描述】:

IOW,\w 字符类的否定形式。我是否应该期望我使用正则表达式的不同语言会有不同的行为?

【问题讨论】:

  • IOW 是什么意思?我认为 \w 的否定形式是 \W..

标签: regex regex-negation


【解决方案1】:

当然\W 包括\r\n

\W\w 的否定,\w 包含字母、数字和连接标点符号(如下划线)。

现在有 3 种可能性:

  1. \w 是基于 ASCII 的 ==> [a-zA-Z0-9_]

  2. \w 是基于 Unicode 的 ==> 类似 [\p{L}\p{Nd}\p{Pc}] 的意思是所有语言的字母、数字和一些类似于下划线 See Unicode on regular-expressions.info 的字符

  3. 风格允许您使用修饰符切换\w 的行为。

但由于\w 中从未包含换行符,因此它们在所有情况下都包含在\W

【讨论】:

  • 然后'拆分/[\W+\n+\r+]/,$multi_line_string;'应该等于'split /\W+/, $multi_line_string;'?因为我从这些中得到了不同数量的结果。
  • 这可能来自[\W+\n+\r+],你需要将量词放在字符类后面,这样你就可以在类中添加+。比较[\W\n\r]+\W+
【解决方案2】:

\w 是[a-zA-Z0-9_] 的简写,因此它只会匹配 a-z(小写和大写)、数字和下划线。否定的 \w 是 \W 将匹配除 \w

之外的所有内容

阅读here更多。

基本上有 2 种正则表达式,POSIX 和 Perl。从理论上讲,posix 正则表达式应该独立于编程语言,但也有一些已知的例外。请参阅此线程了解 Java 和 .NET 之间的差异(理论上相同的 posix,实际上不一样) Are Java and C# regular expressions compatible?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    • 1970-01-01
    • 2012-06-15
    • 2012-08-03
    • 2023-03-19
    • 1970-01-01
    相关资源
    最近更新 更多