正则表达式可以匹配非英语字符?
在正则表达式中匹配非英语字符的最简单方法是什么?我想匹配输入字符串中的所有单词,但是语言可能不是英语,因此我需要匹配,?,?和?之类的东西。同样,这是在Javascript / jQuery中,因此任何解决方案都需要适用于此。
解决方案
所有启用Unicode的Regex风格都应具有与所有Unicode字母匹配的特殊字符类(如\ w)。在这里看看特定口味。
我们可以使用与其他任何字符匹配相同的方法,但是使用\ uXXXX,其中XXXX是字符的Unicode码。
看着:
http://unicode.org/charts/charindex.html
http://unicode.org/charts/
http://www.decodeunicode.org/
这应该做到这一点:
[^\x00-\x7F]+
它与ASCII字符集(0-127,即0x0至0x7F)中不包含的任何字符匹配。
我们可以使用Unicode执行相同的操作:
[^\u0000-\u007F]+
对于unicode,我们可以查看以下2个资源:
- Unicode范围的代码表列表
- 此工具创建一个按Unicode块过滤的正则表达式。
正则表达式,Unicode和Javascript的情况糟透了。程序员必须依靠外部库来识别""是一个单词,甚至""是一个字母,这是荒谬的。
但事实如此。
这个人写了一个很好的库来处理Javascript Regexes中的Unicode:
http://blog.stevenlevithan.com/archives/javascript-regex-and-unicode
Unicode东西是此正则表达式库的插件:
http://xregexp.com/
这是有关Unicode扩展的帖子:
http://blog.stevenlevithan.com/archives/xregexp-unicode-plugin
扩展页面本身:
http://xregexp.com/plugins/
很棒的工作,但仍然让我感到困惑,Java脚本在这方面是如此落后。
(他为奥赖利(O'Reilly)撰写了有关该主题的书,因此很有可能他知道自己在说什么。)
他的实现方式是通过添加具有某些属性的字符表。然后,当用他的库构造一个正则表达式时,\ p {charclass}被替换为[[allthecharactersintheclass]
。