Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 在zsh正则表达式中匹配unicode字符_Regex_Shell_Unicode_Zsh - Fatal编程技术网

Regex 在zsh正则表达式中匹配unicode字符

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

我希望确保变量不包含特定字符(在本例中为“α”),但以下代码失败(返回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"
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]"