2

我会从一开始就警告大家:我是正则表达式的初学者。考虑到这一点,让我们开始吧,我正在使用 C++ Deelx 库。

我有这个文本要传递到我的正则表达式中:

char tempStr[] = "Ésta è À ç À Ária õ ûma CÓïSSSê";

我的意图是删除所有重音字符的出现。在非常好的网站上阅读正则表达式: http ://www.regular-expressions.info/completelines.html

我做了这个表达式来替换所有出现的大写重音“A”:

//^\b.*(À|Á|Â|Ã|Ä|Å)\b.*$

令我惊讶的是,它没有用。我对这个表达式的理解是:“在整个字符串中搜索,这些字符出现零次或多次”。

现在,当我使用这个表达式时,工作就完美地完成了:

(À|Á|Â|Ã|Ä|Å)

让我想知道的是:我什么都没有确定,而是一组字符,既没有发生次数也没有工作,在第一种情况下什么也没有发生。为什么?

4

1 回答 1

1

这个正则表达式:

^\b.*(À|Á|Â|Ã|Ä|Å)\b.*$

说寻找:

  • 字符串的开头 ( ^)
  • 后跟一个单词边界 ( \b)
  • 后跟任何字符 无或多次 ( .*)
  • 后跟一个带重音的大写 A ( (À|Á|Â|Ã|Ä|Å))
  • 后跟一个单词边界 ( \b)
  • 后跟任何字符 无或多次 ( .*)
  • 后跟字符串的结尾

所以它只会匹配只有一个大写重音 A 的字符串。

另一个正则表达式:

(À|Á|Â|Ã|Ä|Å)

说寻找:

  • 大写重音 A 之一 ( (À|Á|Â|Ã|Ä|Å))

如果全局应用正则表达式(通常使用全局标志g,某些语言的一些正则表达式函数默认应用它),那么它将多次执行正则表达式。

但是,如果您的意图是删除所有重音字符,则可能有比列出所有重音字符更好的方法。例如,根据您想要的内容,您可以仅匹配您想要允许的字符,并删除其余字符。

于 2013-07-22T15:42:53.547 回答