2014-11-21 5 views
0

у меня возникают проблемы, чтобы вычислить 2 регулярное выражение в одном (используется для борьбы с INI-файлами)Regex Группа не начиная с

У меня есть этот (я предлагаю вам использовать Rubular примеры тезисов, чтобы понять)

^(?<key>[^=;\r\n]+)=((?<value>\"*.*;*.*\"[^;\r\n]*);?(?<comment>.*)[^\r\n]*) 

соответствовать:

  • Это = "IsNot; acomment"
  • Это = "Isa"; комментарий
  • Это = "иша, специальный", корпус

И у меня это один:

^(?<key>[^=;\r\n]+)=(?<value>[^;\r\n]*);?(?<comment>[^\r\n]*) 

соответствовать

  • Это = isasimplecase
  • Это = isasimple; комментарий

И я пытаюсь объединить 2 регулярных выражения, к сожалению, я не управляю e сказать «Если моя группа значений не начинается с \« используйте вторую, если не использовать первую ».

Прямо сейчас у меня есть это:

^(?<key>[^=;\r\n]+)=(((?<value>\"*.*;*.*\"[^;\r\n]*);?(?<comment>.*)[^\r\n]*)|(?<value>[^;\r\n]*);?(?<comment>[^\r\n]*)) 

Но это создает больше 2 секции неназванный для простого случая без цитировал. Я думал, что, возможно, добавив «первый элемент группы значений для простого случая не должен начинаться с \». Но мне это не удалось.

PS: Я предлагаю вам использовать rubular, чтобы лучше понять мою проблему. Извините, если я не был достаточно ясен

ответ

0

Как насчет этого?

^(?<key>[^=;\r\n]+)=(?<value>"[^"]*"|[^;\n\r]*);?(?<comment>.*) 

DEMO

  • (?<key>[^=;\r\n]+) Соответствует части перед = символом.
  • "[^"]*" Соответствует строке в двойных кавычках, например, "foobar". Если не существует, то двигатель регулярного выражения переместится к следующему шаблону, который равен [^;\n\r]*, и соответствует совпадению с первым ; или символом новой строки или \r. Эти совпадающие символы хранятся в названной группе с именем value.
  • ;? Дополнительные точки с запятой.
  • (?<comment>.*) Оставшиеся символы хранятся в группе comment.
+0

Благодарим вас, но это не сработает с: This = "isa; special"; case. Для этого у нас должно быть: Это «isa; special» В этом случае у меня так много проблем. Если есть ";" внутри цитаты он не должен быть обнаружен как комментарий. – naurel

+0

проверить мое обновление. –

+0

Спасибо! Идеально.Можете ли вы объяснить мне, как вы это сделали, чтобы создать регулярное выражение? Я хотел бы научиться думать, как строить такие вещи. – naurel