Поиск строки с использованием регулярных выражений - PullRequest
2 голосов
/ 07 июля 2011

я пытаюсь сопоставить строки, которые не содержат кавычек, но они могут содержать экранированные кавычки .

когда я говорю «строка», я имею в виду кавычки и строку внутри них.

Я использую это регулярное выражение, но оно не работает.

\"(?![^\\\\]\")\"

решение:

@"""[^""\\\r\n]*(?:\\.[^""\\\r\n]*)*"""

код (c #)

MatchCollection matches = Regex.Matches(input,@"""[^""\\\r\n]*(?:\\.[^""\\\r\n]*)*""");
        foreach (Match match in matches)
        {
            result += match.Index + " " + match.Value + System.Environment.NewLine ;
        }

Ответы [ 2 ]

6 голосов
/ 07 июля 2011

"[^"\\\r\n]*(?:\\.[^"\\\r\n]*)*"

http://www.regular -expressions.info / examplesprogrammer.html

Обратите внимание, что вам нужно правильно экранировать некоторые символы (в зависимости от того, какой строковый литерал вы используете)! Следующая демка:

using System;
using System.Text.RegularExpressions;

class Program
{
  static void Main()
  {
    string input = "foo \"some \\\" text\" bar";

    Match match = Regex.Match(input, @"""[^""\\\r\n]*(?:\\.[^""\\\r\n]*)*""");

    if (match.Success)
    {
      Console.WriteLine(input);
      Console.WriteLine(match.Groups[0].Value);
    }
  }
}

напечатает:

foo "some \" text" bar
"some \" text"
2 голосов
/ 07 июля 2011

Попробуйте это

[^"\\]*(?:\\.[^"\\]*)*
...