Regex: исключить строку из сопоставленного шаблона - PullRequest
0 голосов
/ 07 мая 2020

Строка ввода:

hrStorageDescr{hrStorageDescr="devfs: dev file system, mounted on: /.mount/dev"}

Регулярное выражение для соответствия только значению hrStorageDescr:

.*hrStorageDescr="(.*?)",.*

Как это написать regex, чтобы сохранить функцию сопоставления, но исключить все в значении, если совпадает devfs строка?

1 Ответ

0 голосов
/ 07 мая 2020

Вы можете сопоставить bhrStorageDescr с предшествующей границей слова \b

Первое совпадение = " и утверждать, что то, что находится прямо справа, не devfs , за которым следует граница слова с использованием отрицательного просмотра вперед (?!devfs\b)

Если это утверждение выполнено успешно, захватите группу, соответствующую любому символу, кроме ", с использованием отрицательного класса символов и закройте группу перед сопоставлением закрывающая двойная кавычка ([^"]+)

Использование .* будет соответствовать последнему вхождению шаблона, использование .*? будет соответствовать первому. Если вы хотите сопоставить все вхождения, вы можете пропустить эту часть, предполагая, что вы разрешено сопоставлять все совпадения вместо одного совпадения.

.*?\bhrStorageDescr="(?!devfs\b)([^"]+)"

Regex demo

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