Простой Java регулярное выражение заменить вопрос - PullRequest
5 голосов
/ 30 марта 2010

У меня есть простой XML-файл, и я хочу удалить все до первого тега <item>

<sometag>
  <something>
   .....
  </something>
  <item>item1
  </item>
  ....
</sometag>

Следующий код Java не работает:

String cleanxml = rawxml.replace("^[\\s\\S]+<item>", "");

Как правильно это сделать? И как мне решить проблему, не связанную с жадностью? Извините, я программист на C #.

Ответы [ 3 ]

4 голосов
/ 30 марта 2010

Ну, если вы хотите использовать регулярные выражения, то вы можете использовать replaceAll. В этом решении используется квантификатор с неохотой и обратная ссылка:

String cleanxml = rawxml.replaceAll(".*?(<item>.*)", "$1");

Также вы можете использовать replaceFirst. Это решение использует позитивный взгляд.

String cleanxml = rawxml.replaceFirst(".*?(?=<item>)", "");

Однако имеет смысл использовать indexOf и substring.

String cleanxml = rawxml.substring(rawxml.indexOf("<item>"));

Причина, по которой replace не работает, заключается в том, что ни перегрузки char, ни CharSequence не основаны на регулярных выражениях. Это простая замена персонажа (последовательности).


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

3 голосов
/ 30 марта 2010

... Как правильно поступить этот? ...

Поскольку вы спросили о правильном способе сделать это, проанализируйте XML, удалите узлы и повторно сериализуйте в строку. Вы никогда не должны использовать регулярные выражения для манипулирования XML или любым другим структурированным документом, для которого доступны анализаторы (JSON, YAML и т. Д.).
Для небольшого XML я бы предложил JDOM .

1 голос
/ 30 марта 2010

использование

replaceAll

или

replaceFirst

просто заменит, будет искать совпадения строк НТН

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