德国元音和正则表达式

时间:2017-02-01 00:40:26

标签: c++ regex letters

我现在遇到了这种奇怪的现象。如果我使用ifstream为程序提供文件内容并将正则表达式应用于传入的单词,德语字母äöü给我带来了一些困难。如果其中任何一个出现在单词的开头,则正则表达式无法识别它们,但如果单词中出现任何一个字母则不会。所以这些行

string word = "über";
regex check {R"(\b)" + word + R"(\b)", regex_constants::icase};
string search = "Es war genau über ihm.";

无效,因为正则表达式无法在字符串搜索中找到über。然而,

string word = "für";
regex check {R"(\b)" + word + R"(\b)", regex_constants::icase};
string search = "Es war für ihn.";

会起作用,因为ü出现在单词中。为什么这样,我该如何解决这个问题?我想过用ue和每个ä用oe替换每个ü,然后用oe取代每个ü,然后取消替换,但还有另一种可能性吗?我正在使用Visual Studio 2015。

1 个答案:

答案 0 :(得分:1)

改为使用regex check {"(^|[\\x60\\x00-\\x2f\\x3a-\\x40\\x5b-\\x5e\\x7b-\\x7e])über($|[\\x60\\x00-\\x2f\\x3a-\\x40\\x5b-\\x5e\\x7b-\\x7e])", regex_constants::icase};

C ++正则表达式的默认语法类似于JavaScript。 \b doesn't support Unicode

And from microsoft.com

  

Word Boundary

     

在以下情况下会出现字边界:

     
      
  • 当前字符位于目标序列的开头,是字符A-Za-z0-9 _之一。

  •   
  • 当前字符位置超过目标序列的末尾,目标序列中的最后一个字符是其中一个   字符。

  •   
  • 当前字符是单词字符之一,前面的字符不是。

  •   
  • 当前字符不是单词字符之一,前面的字符是。

  •   
相关问题