Какие регулярные выражения использовать для замены строк в файле XML - PullRequest
0 голосов
/ 27 июля 2010

У меня есть большое количество записей следующего типа, которые я должен изменить

  1. Я хотел бы удалить строку create_by = "29", не оставляя пробела. Примечание: подстановочный знак внутри значения созданного_бай будет предпочтительным

  2. Я хотел бы удалить всю строку creation_date = "...", и /> больше должно двигаться после состояния = "1" />

  3. Вставить новую статическую строку перед переменной состояния (например, updated_by = "30")

XML:

<user id="1"
      org_id="3"
      created_by="29"
      state="1"
      creation_date="2010-06-01"/>

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

Ответы [ 2 ]

2 голосов
/ 27 июля 2010

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

search: (\s+)created_by="[^"]+"(\s+state="[^"]+")\s+creation_date="[^"]+"

replace: $1modified_by="30"$2

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

(<user(?:\s+\w+="[^"]+")+?)

... и изменить ссылки группы захвата в замене следующим образом:

$1$2modified_by="30"$3

2 голосов
/ 27 июля 2010

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

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

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