Подстановочное выражение Regex внутри литерала - PullRequest
0 голосов
/ 17 июня 2020

У меня есть ответ в формате XML, который мне нужен для Regex out (с использованием Splunk), есть несколько тегов вариации, чтобы учесть, что они выглядят примерно так:

<charge-request>
...
</charge-request

и

<charge-response>
...
</charge-response>

Однако часть <charge может быть заменена рядом разных вещей в зависимости от того, что делает система (например, зарядка, возврат и т. Д. c) id хотел бы выяснить, как я могу wild card это что-то вроде <*-request>, чтобы не заботиться о том, что находится между < и окончанием -request>, <*-request> также должен быть частью группы, поскольку он является частью исходного запроса / ответа.

Прямо сейчас у меня есть такое регулярное выражение:

"(?<raw_message>(?:<charge-request>|<charge-response>).*(?:<\/charge-request>|<\/charge-response>))"

Как я могу обновить это, чтобы не заботиться о том, что находится в < и окончании -request> (или -response> если на то пошло)

Ответы [ 2 ]

1 голос
/ 17 июня 2020

/ w соответствует одиночному символу слова, / w + соответствует строке символов слова до символа другого типа. Итак:

(<\w+)(-)(request>|response>)

должно соответствовать

<anyword-request> and <anyword-response>.   

В то время как:

(<\w+)(-)(\w+>)

должно соответствовать

<anyword-anyword>
0 голосов
/ 17 июня 2020

Использование правильного парсера : :

xmllint --xpath '//*[starts-with(name(), "charge")]' file

Это будет соответствовать всем тегам, начинающимся с charge.

Пример получения содержимого этих тегов:

$ cat file.xml
<root>
  <charge-request>
  foo
  </charge-request>
  <charge-response>
  bar
  </charge-response>
  <charge-any>
  base
  </charge-any>
  <anything>
  xxx
  </anything>
</root>

затем

xmllint --xpath '//*[starts-with(name(), "charge")]/text()' file

Вывод

foo

bar

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