Regex 在zsh正则表达式中匹配unicode字符
我希望确保变量不包含特定字符(在本例中为“α”),但以下代码失败(返回1): 编辑:根据下面stema的反馈更改模式,要求从头到尾只匹配“非-‘α’”字符 将“α”替换为例如“x”可以正常工作。为什么它会以“α”失败,我如何才能使它工作 系统信息:Regex 在zsh正则表达式中匹配unicode字符,regex,shell,unicode,zsh,Regex,Shell,Unicode,Zsh,我希望确保变量不包含特定字符(在本例中为“α”),但以下代码失败(返回1): 编辑:根据下面stema的反馈更改模式,要求从头到尾只匹配“非-‘α’”字符 将“α”替换为例如“x”可以正常工作。为什么它会以“α”失败,我如何才能使它工作 系统信息: $ zsh --version zsh 4.3.11 (i386-apple-darwin11.0) $ locale LANG="en_GB.UTF-8" LC_COLLATE="en_GB.UTF-8" LC_CTYPE="en_GB.UTF-8
$ zsh --version
zsh 4.3.11 (i386-apple-darwin11.0)
$ locale
LANG="en_GB.UTF-8"
LC_COLLATE="en_GB.UTF-8"
LC_CTYPE="en_GB.UTF-8"
LC_MESSAGES="en_GB.UTF-8"
LC_MONETARY="en_GB.UTF-8"
LC_NUMERIC="en_GB.UTF-8"
LC_TIME="en_GB.UTF-8"
LC_ALL="en_GB.UTF-8"
编辑2:我现在在一台运行Ubuntu11.10的Linux机器上测试了ZSH4.3.11,具有相同的语言环境设置,它在那里工作–即
FOO=“test”&&[$FOO=~'^[^α]*$']]
返回成功。我正在运行Mac OS X 10.7.2。使用此正则表达式*[^α].
无法测试α
是否不在字符串中。这项测试的内容是:字符串中是否有一个字符不是α
如果要检查字符串中是否没有此字符,请执行以下操作
FOO="test" && [[ $FOO =~ '^[^α]*$' ]]
这将检查从头到尾的完整字符串是否由非“α”字符组成。表达这一点的最简单方式是在开头锚定一个负前瞻:
^(?!.*α)
这意味着“当我从一开始就展望未来时,我不应该在任何地方看到α
使用look heads的优点是它们是非捕获的,因此您可以将它们与其他捕获正则表达式相结合,例如,要在输入中查找不包含α的引号中的数字组,请使用以下命令:^(?!α)“(\d+)“
出于某种原因,我在我的构建系统上遇到了类似的问题,而我的笔记本上有ZSH 5.0.2版(Unicode按预期工作),构建系统上有ZSH 4.3.17版。在我看来,ZSH 5在正则表达式模式中没有Unicode字符的问题
具体而言,解析键/值对:
[[ "revision/author=Ľudovít Lučenič" =~ '^([^=]+)=(.*)$' ]]
echo "$match[1]:$match[2]"
呈现
: # ZSH 4.3.17
revision/author:Ľudovít Lučenič # ZSH 5.0.2
另外,我假设ZSH4Unicode支持通常存在一些缺点
更新:经过调查,我发现regexp中的点与ZSH 4中的字母“č”不匹配。一旦我将模式更新为:
[[ "revision/author=Ľudovít Lučenič" =~ '^([^=]+)=((.|č)*)$' ]]
echo "$match[1]:$match[2]"
我在两个ZSH版本中得到相同的结果。不过,我不知道为什么这封信会成为这里的问题。然而,它可能会帮助一些人克服这个缺点。哦,是的。因此,它不一定需要匹配整个字符串。是的,那么你是对的,它应该是FOO=“test”&&[$FOO=~'^[^α]*$']]
。但这仍然失败。将“α”更改为“x”成功,因此在此处使用“α”字符时一定会有失败的地方。
[[ "revision/author=Ľudovít Lučenič" =~ '^([^=]+)=((.|č)*)$' ]]
echo "$match[1]:$match[2]"