- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
不知为何,不知为何,可能是我的系统或脑子不太对劲,正则表达式“[A-Z]”似乎无法识别字母“W”和“[a-z]”似乎无法识别字母“w”。示例:
for x in A a B b C c D d E e F f G g H h I i J j K k L l M m N n O o P p Q q R r S s T t U u V v W w X x Y y Z z; do echo $x | egrep "[A-Za-z]"; done
我的输出是:一个一个乙bCC丁d乙电子FFGGHH我一世杰j钾k大号升米米否n欧oPp问qRr小号秒吨吨ü你VvXX是是Zz
如您所见,字母“W”和“w”都丢失了。我是唯一一个?什么可能导致这个?如果它是一个错误,我应该在哪里报告它?这发生在 bash 和 zsh 中,它发生在 sed 和 egrep 中(可能更多,我只测试了这两个),所以问题似乎与一般的正则表达式有关......:o那么……这是怎么回事??
编辑:有人询问我的语言环境,所以在这里。
$ locale
LANG=sv_SE.utf8
LC_CTYPE="sv_SE.utf8"
LC_NUMERIC=sv_SE.UTF-8
LC_TIME=sv_SE.UTF-8
LC_COLLATE="sv_SE.utf8"
LC_MONETARY=sv_SE.UTF-8
LC_MESSAGES="sv_SE.utf8"
LC_PAPER=sv_SE.UTF-8
LC_NAME=sv_SE.UTF-8
LC_ADDRESS=sv_SE.UTF-8
LC_TELEPHONE=sv_SE.UTF-8
LC_MEASUREMENT=sv_SE.UTF-8
LC_IDENTIFICATION=sv_SE.UTF-8
LC_ALL=
如果这是问题所在,那么我猜任何决定 sv_SE.UTF-8 的东西都是错误的,因为字母“w”是在 2006 年添加到瑞典字母表中的。此外,如果 A-Z 间隔取决于当前语言环境,当语言环境设置为瑞典语时,[A-Ö] 不应该适用于整个瑞典字母表吗?它没有,它给出了一条错误消息。然而 [[:alpha:]] 似乎包含所有瑞典字母,所以我想我对此很满意。
最佳答案
从技术上讲,在 Posix 正则表达式中使用诸如 [a-z]
的范围表达式(与 grep 实用程序一样)仅在 Posix (C) 语言环境中具有指定的行为。这意味着您确实无法在 sv_SE
语言环境(或任何其他国际化语言环境)中可靠地使用范围表达式。但是,您可以可靠地使用字符类,例如 [[:lower:]]
、[[:alpha:]]
、[[:alnum: ]]
等等,这通常是您应该做的。
话虽如此,我相信您遇到的确实是 v2.28 中引入的 glibc 中的错误,因为以前版本的 sv_SE
语言环境正确放置了 w
在小写范围内,W
在大写范围内。我认为此更改不符合用户的期望,因为它会破坏正则表达式范围表达式,尽管这些表达式具有未指定的行为,但以前仍按预期工作。
该问题大约一个月前被报告为 glibc 错误,并且由于缺乏文档几乎立即关闭;昨天,我requested that it be reopened . (更新:那个 bug 被重新认定为另一个 bug 的重复,其最终解决方案只能是对底层设计问题的全面解决方案。换句话说,glibc 团队知道存在问题但不屏住呼吸寻求解决方案。)
我在 this repository 中放置了一个可能的替换 sv_SE
语言环境定义文件,以防它被证明对某人有用。请不要安装它,除非您在使用 glibc 的语言环境定义时遇到问题。
我在上面链接的错误报告中的过长评论试图列出问题,这更多是定义问题而不是实现问题。本质问题是很难(如果不是不可能的话)定义一个与整个字符串比较顺序完全一致的单字符排序顺序。阅读 Posix 基本原理文档中的字里行间,似乎很明显,很多人都用头撞过这堵特殊的砖墙,但从未设法提出一个具有实现共识的实用可移植提案。 (“如上所述,已努力解决差异,但尚未找到足够具体的解决方案以允许可移植软件,同时又不会使现有实现无效。”)
对各种语言环境定义文件的善意清理导致瑞典语语言环境中的字符顺序发生变化。它没有改变字符串排序顺序,因此 V
和 W
继续像以前一样排序(也就是说,就好像它们是同一字母的变体拼写而不是不同的字母),并且它没有改变 CTYPE 定义,所以 W
和 w
继续是字母(因此匹配 [[:alpha:]]
) 和以前一样。但它确实(我相信是意外地)改变了字符顺序。之前,W
跟在 V
之后,w
跟在 v
之后,所以 W
匹配 [U-X]
和 w
匹配 [u-x]
。更改将两个字符放在刺 (þ) 之后,这意味着它不能匹配任何范围表达式。 (正则表达式范围表达式仅限于单字节代码点。)
A previous question已被建议作为此问题的重复项,但我删除了重复标记,因为该问题侧重于使用 [a-z]
的智慧而不是可能的实现错误,还因为它是关于 Perl 正则表达式的而不是 Posix 正则表达式。但是,答案中有很多有用的信息。
关于regex - 正则表达式 [A-Za-z] 似乎不包括字母 W 和 w,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52570103/
我需要以下正则表达式,允许 [a-zA-Z]+ 或 [a-zA-Z]+[ \\-]{0,1}[a-zA-Z]+ 所以我想在 a-zA-Z 字符之间允许无限的减号和空格 示例: sdfsdfdsf-sf
我的电子邮件验证脚本中有以下代码。我想了解有关变量reg的更多信息,但不知道如何查找相关信息,因为我不知道其语法叫什么。有人可以引导我找到正确的资源或告诉我这种语法的名称吗? function val
我试图写一个正则表达式来匹配字符串形式: "[A-Za-z][A-Za-z]-[A-Za-z][A-Za-z]_[match all chars]" 我要匹配的字符串必须是这种形式,包括连字符和下划线
正则表达式 ^[A-Za-Z ][A-Za-z0-9 ]* 描述“第一个字母应该是字母表,其余字母可能是字母数字”。但是我怎么也允许特殊字符呢?当我输入“C#”时出现错误。 如何输入特殊字符且首字母应
^[a-zA-Z] 和 [^a-zA-Z] 有区别吗? 当我 checkin C# 时, Regex.IsMatch("t", "^[a-zA-Z]") // Returns true (I thi
我试图让我的 NSScanner 尝试扫描以下正则表达式:[a-zA-Z_][a-zA-Z0-9_]*,但遇到困难。 我可以尝试先读取 a-Z_,然后尝试附加 a-Z0-9_。 我想知道是否有更简单/
我希望能够在没有 Microsoft 语言扩展恶作剧的情况下编译我的 VS2017 C++ 项目。 根据此处的回复,/Za compiler directive does not compile sy
我需要一个满足以下规则的正则表达式: 长度必须介于8-32个字符之间 必须以字母开头 不得包含任何空格 不得包含任何特殊字符 我在google的帮助下尝试了自己的表达式,例如^([a-zA-Z][a-
我有这个用于电子邮件验证的正则表达式(假设只有 x@y.com、abc@defghi.org、something@anotherhting.edu 是有效的) /^[a-zA-Z0-9]+@[a-zA
我正在将 Entity Framework 与 PostgreSQL 结合使用。我需要编写一个遵循这种格式的查询: await Context.Database.ExecuteSqlCommandAs
这个问题已经有答案了: Reference - What does this regex mean? (1 个回答) 已关闭 3 年前。 我刚刚开始使用正则表达式,正在解决这个问题 question其
我正在学习正则表达式,目前看来我很困惑。 val.replace(/^[^a-zA-Z0-9]*|[^a-zA-Z0-9]*$/g, ''); 在上面的表达式中 1) 哪一部分表示不包含空格?因为我试
我正在尝试通过Vagrant Docker规定运行Docker容器: d.run "tomcat:8.0", args: "-it -d -p 8888:8888 --name tomcat8" Va
我知道正则表达式模式必须匹配以以下字符的组合和重复开头的字符串: a-z A-Z 一个空白字符 并且对字符串的结尾方式没有限制! 第一个案例 所以像 uoiui897868 这样的字符串(任何只以空格
如何删除字母而不是数字之间的空格 例如: 输入 I ES P 010 000 000 000 000 000 001 001 000 000 IESP 000 000 输出 IESP 010 000
我正在使用 来确保输入的值仅包含字母表,它工作正常,但不允许在字符串中占用空间。 如何在上述模式中加入空格字符? 提前致谢。 最佳答案 只需将空格添加到正则表达式。 如果您想要任何空格,而不仅仅是
我正在编写一个解决方案,用于扫描 iOS 南非驾驶执照背面的 PDF417 条形码 ( http://en.wikipedia.org/wiki/PDF417 )。我找不到任何有关如何解码条形码的文档
关闭。这个问题需要更多focused .它目前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post . 6年前关闭。 Improve this questi
我有这个代码; $('[data-question=502] textarea').bind('input propertychange', function() { $(this).val
引用此讨论:Decode South African (ZA) Drivers License 请协助我尝试在 Android 上的 Java 中创建 PublicKey 实例时似乎遇到错误。我已粘贴
我是一名优秀的程序员,十分优秀!