我是 ruby 的新手,我正在尝试使用正则表达式。
我有一个看起来像这样的文本:
HEADING
Some text which is always non capitalized. Headings are always capitalized, followed by a space or nothing more.
YOU CAN HAVE MULTIPLE WORDS IN HEADING
我正在使用这个正则表达式来选择所有标题:
^[A-Z]{2,}\s?([A-Z]{2,}\s?)*$
但是,它匹配所有不包含字符如 Č、Š、Ž(斯洛文尼亚语字符)的标题。
所以我猜 [A-Z] 只匹配 ASCII 字符?我怎样才能得到 utf8?
最佳答案
你是对的,当你定义 ASCII 范围 A-Z
时,匹配只是针对那些字符。这与计算机上字符的历史有关,随着时间的推移添加了越来越多的字符,并且它们并不总是以易于使用的方式在编码中构建。
您可以列出一个更大的字符类来匹配您需要的斯洛文尼亚字符。
但是有一个捷径。其他人已经将必要的数据添加到 Unicode 数据中,以便您可以为“所有大写字符”编写更短的匹配项:/[[:upper:]]/
。参见 http://ruby-doc.org//core-2.1.4/Regexp.html了解更多。
通过这种调整改变你的正则表达式:
^[[:upper:]]{2,}\s?([[:upper:]]{2,}\s?)*$
您可能需要进一步调整它,例如它不会匹配标题“I AM A HEADING”,因为匹配坚持每个单词至少有两个字母长。
在没有看到所有示例的情况下,我可能会简化组匹配并只在任何地方允许空格:
^[[:upper:]\s]+$
关于ruby - 大写字母的正则表达式不匹配重音字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28715837/