相关疑难解决方法(0)

为什么这个正则表达式允许插入符号?

http://regexr.com/3ars8

^(?=.*[0-9])(?=.*[A-z])[0-9A-z-]{17}$
Run Code Online (Sandbox Code Playgroud)

应该匹配"17个字母数字字符,也允许使用连字符,必须包含至少一个字母和至少一个数字"

它会正确匹配:

ABCDF31U100027743
Run Code Online (Sandbox Code Playgroud)

并正确拒绝匹配:

AB$DF31U100027743
Run Code Online (Sandbox Code Playgroud)

(以及几乎任何其他非字母数字字符)

但显然会允许:

AB^DF31U100027743
Run Code Online (Sandbox Code Playgroud)

regex

50
推荐指数
3
解决办法
3010
查看次数

如何让grep [AZ]独立于语言环境?

我正在做一些日常的捣蛋,突然发现看似微不足道的东西不起作用:

$ echo T | grep [A-Z]
Run Code Online (Sandbox Code Playgroud)

没有比赛.

为什么T不在AZ范围内?

我改变了正则表达式:

$ echo T | grep [A-Y]
Run Code Online (Sandbox Code Playgroud)

一场比赛!

哇!如何在AY内,但不在AZ内?

显然这是因为我的环境设置为爱沙尼亚语区域,其中Y位于字母表的末尾,但Z位于中间位置:ABCDEFGHIJKLMNOPQRSŠZŽTUVWÕÄÖÜXY

$ echo $LANG
et_EE.UTF-8
Run Code Online (Sandbox Code Playgroud)

这对我来说有点震惊.99%的时候我会用计算机代码,而不是爱沙尼亚文学.我一直在以错误的方式使用grep吗?我过去因此犯过什么样的错误?

在尝试了几件事后,我得出了以下解决方案:

$ echo T | LANG=C grep [A-Z]
Run Code Online (Sandbox Code Playgroud)

这是使grep语言环境独立的推荐方法吗?

更多......定义这样的别名是安全的:

$ alias grep="LANG=C grep"
Run Code Online (Sandbox Code Playgroud)

PS.我也想知道为什么字符范围[A-Z]首先依赖于语言环境,而且\w似乎不受语言环境的影响(尽管手册中说\w的相当于[[:alnum:]]- 但我发现后者依赖于语言环境而\w不是语境环境).

grep locale

7
推荐指数
1
解决办法
1248
查看次数

标签 统计

grep ×1

locale ×1

regex ×1