2013-12-06 3 views
0

Скажем, у меня есть строка, которая выглядит следующим образом:Regex модель, чтобы найти вхождения HTML-теги

iword/i 

Здесь тег i. Это похоже на тег HTML, за исключением угловых скобок <.

Или, скажем, у меня есть

emword/em

Здесь тег em.

Что я хочу - это шаблон, который удаляет эти теги.

Я проверяю этот шаблон:

<([A-Z][A-Z0-9]*)\b[^>]*>(.*?)</\1> на http://rubular.com/, но он не работает должным образом.

В частности, то, что я хочу сделать, это с Objective-C:

NSString *string = @"iword/i"; 
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:&error]; 
return [regex stringByReplacingMatchesInString:string options:0 range:NSMakeRange(0, string.length) withTemplate:@""]; 

, который будет просто удалить все, кроме word.

+0

Пример входной строки не ясен. Все вещи, которые вы заменяете в конце строки с завершающей линией новой строки? – uchuugaka

+1

Является ли эта проблема той же проблемой, что и ваш предыдущий вопрос (http://stackoverflow.com/questions/20414673/why-is-my-nsregularexpression-pattern-not-working) или полностью отдельный? Если это часть одной и той же проблемы, сделайте это в две фазы - угловые скобки, а затем теги - это, вероятно, не лучший способ сделать это, поскольку вы потеряете расположение тегов. Также вы просто пытаетесь удалить определенные пары соответствия или все теги html? Как насчет тегов, таких как
(или
), которые являются одноточечными? – CRD

+0

Просто заметили, что ваше регулярное выражение соответствует угловым скобкам, но ваш вопрос говорит, что угловых скобок нет ... – CRD

ответ

1

Вам понадобится полный список html-тегов, которые вы хотите удалить, затем (i, em, b, what else?), Поскольку вам нужно будет искать именно теги для удаления.

Один из способов сделать это: \b(i|em|b)(\w*)\/(i|em|b)\b (и, как вы видели раньше с Obj-с, вероятно, некоторые двойной \ отводящей)

В действии: http://regex101.com/r/qL3cU9

Вход:

  • iword/я
  • emword/эм
  • bword/б
  • ibword/И.Б.
  • notgoing/tomatch этот результат

Замена:

  • слово
  • слово
  • слово
  • ibword/И.Б.
  • notgoing/tomatch это
+0

Это не работает со следующим кодом: 'NSRegularExpression * regex = [NSRegularExpression regularExpressionWithPattern: @" \ b (i | em | b). * \\/(i | em | b) \ b "options: NSRegularExpressionCaseInsensitive error: &ошибка]; return [regex stringByReplacingMatchesInString: опции строки: 0 диапазон: NSMakeRange (0, string.length) withTemplate: @ ""]; ' – Snowman

+0

Ничего не заменено – Snowman

+0

Ах, извините, должно было бы упомянуть, что это использование групп захвата - вам нужно будет получить и вернуть группу захвата 2. Также обновить, чтобы заключить. * в() и обновить ссылку regex101 ($ 2 в PCRE эквивалентно группе захвата 2. Кроме того, вам, вероятно, также придется сбежать \ b: ' \\ b' – brandonscript

Смежные вопросы