Регулярное выражение, необходимое для документа XML - PullRequest
0 голосов
/ 11 ноября 2011

Требуется одно регулярное выражение для поиска

  1. двойных пробелов
  2. табуляции
  3. дополнительный ввод (разрыв строки / возврат каретки)
  4. строкаразрыв между тегом
  5. пробел после / перед закрытием тега

в документе XML.

Ответы [ 2 ]

0 голосов
/ 12 ноября 2011

Как правило, вам нужен xml-анализатор для обработки XML-документов. Регулярные выражения недостаточно мощны, чтобы обрабатывать все случаи .

Использование синтаксиса perl для регулярных выражений:

m{
  [ ][ ]  # double spaces
  |
  \t    # tab
  |    
  $\s*$  # extra enter separated only by whitespace. Note: requires `m` flag
  |  
  # XXX: it works only on simple xml
  <[^<>]*$[^<>]*> # line break inside tag
  |
  # XXX: it works only on simple xml
  [ ]</[^<>]+> |
  </[^<>]+>[ ] # space after/before closing tag
}mxg;

демо

0 голосов
/ 11 ноября 2011

Извините, это не будет значительным ответом, но, возможно, я могу немного помочь. Теперь для шагов 1, 2 и 3 не составит труда найти соответствие как таковое

вкладка \ t

новые строки \ r или \ n

Пробел (пробел, табуляция или новая строка) равен \ s

т. 1 вкладка: (\ t) два пробела = (\ s \ s) или (\ s {2}) и дополнительная строка, как правило, находится по двум разрывам строки подряд, но иногда они могут быть разделены пробелами, так что следите за этим ... (\ r \ s * \ r) | (\ n \ s * \ n)

чтобы сложить все вместе, шаги 1/2/3 с группами захвата:

  (\r\s*\r)|(\n\s*\n)|(\t)|(\s{2})

Но как насчет 4 и 5?

Что ж, им обоим необходимо иметь возможность возвращаться к регулярному выражению в том случае, если у <нет соответствующего> или он не является частью структуры документа. Это может произойти с неверным XML, или в разделах CDATA и тому подобном. Это становится сложным, но может быть сделано с помощью рекурсивных регулярных выражений. Однако я не знаю библиотеки регулярных выражений в c ++, которая поддерживает рекурсию. Извините, но было бы намного проще просто проанализировать ваши строковые данные вручную.

Теперь некоторые диалекты регулярных выражений отличаются, поэтому ваш пробег может отличаться. Для справки, хотя я склонен использовать http://www.regular -expressions.info / quickstart.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...