2013-07-22 3 views
2

Я буду предупреждать вас всех с самого начала: я новичок в регулярных выражениях. Имея это в виду, давайте начнем, и я использую C++ Deelx library.О матчах в регулярном выражении

У меня есть этот текст, чтобы передать в моем регулярном выражении:

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

Мое намерение состоит в том, чтобы удалить все occurencies из акцентированных символов. Читая о регулярных выражениях на очень хорошем сайте: http://www.regular-expressions.info/completelines.html

Я сделал это выражение, чтобы заменить все occurencies прописного ударения «A»:

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

Для моего удивления, это не сработало. Мое недопонимание этого выражения: «Поиск во всей строке, ноль или более случаев этих символов».

Теперь, когда я использую это выражение задание выполнено отлично:

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

Что заставляет меня задаться вопросом, является: Я не определено ничего вместо набора символов ни количество occurencies и работ, а также в В первом случае ничего не происходит. Зачем?

ответ

1

Это регулярное выражение:

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

говорит ищет:

  • начало строки (^)
  • следуют границе слова (\b)
  • следует любой символ ни один или несколько раз (.*)
  • последовал один из самых прописных акцентирован элементы а ((À|Á|Â|Ã|Ä|Å))
  • следует граница слова (\b)
  • следует любому характер ни один или несколько раз (.*)
  • с последующим концом строки

Так это будет соответствовать только строкам, которые имеют только один верхний регистр акцентировано A.

другое регулярное выражение:

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

говорит ищет:

  • один из прописные акцентировано элементов а ((À|Á|Â|Ã|Ä|Å))

Если применить регулярное выражение на глобальном уровне (как правило, с использованием глобального флага g, некоторые регулярные выражения функции некоторых языков примените его по умолчанию), то он будет выполнять регулярное выражение несколько раз.

Однако, если вы намерены удалить все символы с акцентом, могут быть лучшие способы сделать это, чем перечислять все символы с акцентом.В зависимости от того, что вы хотите, вы можете, например, совместить только те символы, которые вы хотите разрешить, и удалить остальные.

+0

Хорошо, я понимаю. Некоторые другие вопросы: для первого шаблона, что мне нужно изменить, чтобы получить эти символы несколько раз? И каково ваше предложение улучшить, чтобы исправить все акцентированные персонажи? Мне очень любопытно. – learner

+2

Для первого шаблона, совпадающего с несколькими акцентированными A, вы должны просто добавить '+' после списка в скобках, например '^ \ b. * (À | Á | Â | Ã | Ä | Å) + \ b. * $' , Но вы могли бы лучше написать его, как '^ \ b. * [ÁÁÂÃÄÅ] + \ b. * $'. Чтобы удалить акцентированные символы, вам, вероятно, следует использовать функцию замены регулярных выражений на вашем языке, а затем совместить символы с акцентом, а затем заменить их пустой строкой. В зависимости от того, какую функцию вы используете, регулярное выражение может отличаться. – rednaw

+0

Понял. Я буду тестировать в своем коде. – learner