Регулярное выражение для очистки XML - PullRequest
3 голосов
/ 16 декабря 2010

Мне приходится иметь дело с XML-данными, которые иногда содержат неэкранированный амперсанд, и я не могу заставить производителя либо экранировать их, либо поместить их в раздел CDATA.

Теперь я ищу регулярное выражение для замены & на & amp; если это не часть сущности. Примерно так: & (?! (Amp | apos | quot | lt | gt);)

К сожалению, моя среда программирования поддерживает только "расширенные регулярные выражения POSIX 1003.2" (см. http://www.kernel.org/doc/man-pages/online/pages/man7/regex.7.html), в котором, похоже, отсутствует оператор not "!", Необходимый здесь.

Есть идеи, как создать необходимое регулярное выражение?

Ответы [ 2 ]

4 голосов
/ 16 декабря 2010

Боковое мышление: заменить все & на &amp, затем заменить все &apos (и т. Д.) На &apos (например)? Вы можете использовать группу, чтобы захватить часть, которая будет возвращена - &(apos)

0 голосов
/ 16 декабря 2010

Вместо того, чтобы искать что-то, соответствующее отрицательному регулярному выражению, вы можете искать что-то, НЕ соответствующее положительному регулярному выражению, что-то вроде:

! ... &(?(amp|apos|quot|lt|gt);)

Я не прочитал всю страницу, на которую вы ссылались, но я уверен, что этодолжно быть возможно.

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