найти строку, в которой отсутствует подстрока в регулярных выражениях файлов xml - PullRequest
0 голосов
/ 27 февраля 2019

Это мое выражение reg, которое находит его

(<instance_material symbol="material_)([0-9]+)(part)(.*?)(")(/)(>)

Мне нужно найти строку, которая не содержит слова "part", а строки xml:

<instance_material symbol="material_677part01_h502_w5" target="#material_677part01_h502_w5"/>
     <instance_material symbol="material_677" target="#material_677"/>  

Ответы [ 3 ]

0 голосов
/ 27 февраля 2019

Многие начинающие регулярные выражения сталкиваются с проблемой поиска строки, не содержащей определенных слов.Вы можете найти более полезные советы на Regular-Expression.info .

^((?!part).)*$
0 голосов
/ 28 февраля 2019

Вы должны знать, что все попытки обработать XML с использованием регулярных выражений неверны, в том смысле, что (а) будут некоторые законные способы написания XML-документа, которые не соответствуют регулярному выражению, и (б)будут некоторые способы получения ложных совпадений, например, вставляя неприятные вещи в комментарии XML.Иногда быть правым в 99% случаев, конечно, нормально, но не делайте этого на производстве, потому что скоро у нас будут люди, пишущие на SO: «Мне нужно сгенерировать XML с атрибутами в определенном порядке, потому что это то, что получает приложение».require. "

Ваше регулярное выражение, например, требует, чтобы атрибут был в двойных, а не в одинарных кавычках, и он не допускает пробелы вокруг знака" = "или в некоторых других местах, где XML допускает пробелы,Если есть какой-то риск того, что люди намеренно попытаются победить ваше регулярное выражение, вам нужно учесть уловки, например, когда люди пишут &#112; вместо p.

, даже если это одноразовый вариант без риска злонамеренного использования.Subversion, тебе гораздо лучше делать это с XPath.Затем он становится простым запросом вроде //instance_materal[@symbol[not(contains(., 'part'))]]

0 голосов
/ 27 февраля 2019

Вы можете использовать отрицательный прогноз

^(?!.*part).*?$
  • ^ - начало строки.
  • (?!.*part) - условие, которое следует избегать part.
  • .*? - сопоставить все, кроме новой строки.
  • $ - конец строки

Демо

...