2

最初から警告します。私は正規表現の初心者です。それを念頭に置いて始めましょう。私は C++ Deelx ライブラリを使用しています。

正規表現で渡すこのテキストがあります。

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

私の意図は、アクセント付きの文字をすべて削除することです。非常に優れたサイトで正規表現について読む: http://www.regular-expressions.info/completelines.html

大文字のアクセント付きの「A」をすべて置き換えるために、次の式を作成しました。

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

驚いたことに、うまくいきませんでした。この表現の私の理解は、「文字列全体を検索し、これらの文字が 0 回以上出現すること」です。

この式を使用すると、仕事は完璧に完了します。

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

私が不思議に思うのは、一連の文字の代わりに何も決定しなかったこと、発生数と作業の数、そして最初のケースでは何も発生しなかったことです。なんで?

4

1 に答える 1

1

この正規表現:

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

次を探します:

  • 文字列の先頭 ( ^)
  • 単語境界が続く ( \b)
  • 任意の文字が続くか、または複数回続く ( .*)
  • 大文字のアクセント付きの A ( (À|Á|Â|Ã|Ä|Å))の 1 つが続きます。
  • 単語境界が続く ( \b)
  • 任意の文字が続くか、または複数回続く ( .*)
  • 続いて文字列の終わり

したがって、大文字のアクセント付きの A が 1 つだけ含まれる文字列にのみ一致します。

他の正規表現:

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

次を探します:

  • 大文字の A の 1 つ ( (À|Á|Â|Ã|Ä|Å))

正規表現をグローバルに適用すると (通常はグローバル フラグを使用し、g一部の言語の一部の正規表現関数ではデフォルトで適用されます)、正規表現が複数回実行されます。

ただし、アクセント付きのすべての文字を削除することが目的の場合は、すべてのアクセント付きの文字をリストするよりも良い方法があるかもしれません。必要に応じて、たとえば、許可する文字のみを一致させ、残りを削除することができます。

于 2013-07-22T15:42:53.547 に答える