首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >非英语字符的不区分大小写正则表达式

非英语字符的不区分大小写正则表达式
EN

Stack Overflow用户
提问于 2012-10-17 14:11:29
回答 4查看 2.5K关注 0票数 1

我需要对包含非英语字符(西班牙语、法语、德语和俄语)的文本执行正则表达式匹配。

我想让匹配忽略大小写,所以对于英文字符,我只使用/i修饰符,但这不适用于像überm ig这样的单词。

写一个正则表达式的最简单的方法是什么,它既可以匹配üBERM ig,也可以与BERM BERM=ig相匹配?同样的方法可以用来把大写的非英语字母转换成Perl中的小写字母吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-10-17 15:08:17

它工作得很好

代码语言:javascript
复制
$ perl -E'use utf8; say "ÜBERMÄẞIG" =~ /^übermäßig\z/i ? "match" : "no match"'
match

$ perl -E'use utf8; say "ÜBERMÄSSIG" =~ /^übermäßig\z/i ? "match" : "no match"'
match

( use utf8;说源代码是用UTF-8编码的。以其他方式在脚本中使用这些字符是不可能的。

我怀疑有一个编码问题,这意味着您认为您在没有使用Perl时就给了Perl“$”,这也可能是因为您使用的是一个旧版本的Perl,它不能正确处理多字符折叠。一般来说,使用/u可能会有所帮助,但对于这个示例来说不应该有什么不同。

票数 4
EN

Stack Overflow用户

发布于 2012-10-17 14:18:58

如果字符串使用Perl的内部编码,/i修饰符就能很好地工作。

例如,它打印“是”:

代码语言:javascript
复制
perl -le 'use utf8; print "yes" if "ÜBERMäßig" =~ /überMÄßiG/i'

"use utf8“告诉Perl我的源代码是用UTF-8编码的,因此Perl将我的源代码中的所有文字字符串从UTF-8解码到它的内部编码。如果没有use utf8,此示例将无法工作。

如果您的字符串来自其他地方,那么您可能需要应用Encode::decode --或者告诉您的源生成正确解码的字符串(例如,可能在大多数DBI驱动程序中)。

票数 2
EN

Stack Overflow用户

发布于 2012-10-17 14:15:53

如果您使用在Perl脚本中将区域设置为适当的值。,那么/i修饰符将适用于非英语字符--以及其他功能,如单词边界的正则匹配以及uclc函数。

注意,如果您需要处理多个外部字符集,链接文档将向您展示如何使用setlocale()在脚本中根据需要切换区域设置。

编辑:--我应该提到,在大多数情况下,这个方法是不推荐的。事情应该只与UTF-8一起工作。但有时还是有用的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12936299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档