【问题标题】:Regex collating symbols正则表达式整理符号
【发布时间】:2016-01-27 16:02:17
【问题描述】:

我试图了解“整理符号”匹配是如何工作的,但我没有说出来。我理解这意味着匹配一个确切的序列,而不仅仅是字符,即:

echo "ciiiao" | grep '[oa]'     --> output 'ciiiao'
echo "ciiiao" | grep '[[.oa.]]' --> no output
echo "ciiiao" | grep '[[.ia.]]' --> output 'ciiiao'

但是,第三个命令不起作用。是我错了还是我误解了什么?

我已阅读此正则表达式tutorial

【问题讨论】:

  • [[.oa.]] 将抛出“无效的排序字符”错误。双括号用于特定的字符类,如[[:alpha:]]。如果您想要确切的顺序,只需执行grep oa
  • 当我使用 C 语言环境时,[[.ia.]] 也是如此。与德语语言环境相同,第二个和第三个命令都失败了。 @MFrancone:你的语言环境是什么?
  • 排序规则用于排序并且是语言环境定义的。您不能像那样即时发明整理序列。特别是您链接到的文档的RE Bracket Expression 部分中的第 4 点说“如果字符串不是当前整理序列定义中的整理元素,或者整理元素没有与之关联的字符(例如,请参阅符号 在 Collat​​ion Order 中显示的示例排序规则定义中,该符号将被视为无效表达式。”。因此,除非 oa/ia 在您的语言环境中整理元素,否则它们可能毫无意义。
  • 谢谢大家,我想整理符号的使用是不同的,因为我不知道“语言环境”的真正含义。我必须首先弄清楚...整理符号在哪里有用?

标签: regex bash


【解决方案1】:

digraph 被视为语言中的单个字符时,通常使用整理符号。它们是POSIX regular expression specification 的一个元素,并未得到广泛支持。

例如,the Welsh alphabet has a number of digraphs 被视为单个字母(下面标有 *)

a b c ch d dd e f ff g ng h i j l ll m n o p ph r rh s t th u w y
       *           *    *          *          *    *      *

假设语言环境文件定义了它(排序符号仅在当前locale 中定义时才有效),排序符号[[.ng.]] 被视为单个字符。同样,像.[^a] 这样的单个字符表达式也将匹配“ff”或“th”。这也会影响排序,因此[p-t] 除了预期的单个字母外,还会包含二合字母“ph”和“rh”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-31
    • 2012-03-19
    • 2019-12-05
    • 2017-01-21
    • 1970-01-01
    • 1970-01-01
    • 2015-03-13
    • 1970-01-01
    相关资源
    最近更新 更多