Поиск неэкранированных строк в стиле C # с помощью регулярных выражений - PullRequest
1 голос
/ 19 февраля 2010

Я пытаюсь написать регулярное выражение, которое находит неэкранированные строки в стиле C #, например

string x = @"hello
world";

У меня проблема в том, как написать правило, которое правильно обрабатывает двойные кавычки в строке, как в этом примере

string x = @"before quote ""junk"" after quote";

Это должно быть легко, верно?

Ответы [ 6 ]

1 голос
/ 19 февраля 2010

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

@".*?(""|[^"])"([^"]|$)

Первые парантезы означают «Если есть« перед заключительной цитатой », то лучше их два», вторые парантезы означают «После заключительной цитаты эфир может быть не цитатой или концом строки .

0 голосов
/ 16 мая 2010
@"(?:""|[^"])*"(?!")

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

0 голосов
/ 16 мая 2010

"^@(""|[^"])*$" - это регулярное выражение, которое вы хотите, ища сначала знак at и двойные кавычки, затем последовательность любых символов (кроме двойных кавычек) или двойных кавычек и, наконец, двойные кавычки.

Как строковый литерал в C #, вам нужно написать его string regex = "^@\"(\"\"|[^\"])*\"$"; или string regex = @"^@""(""""|[^""])*""$";. Выбери свой яд.

0 голосов
/ 19 февраля 2010

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

@"[^"]*?(""[^"]*?)*";

Поиск начальных символов @ ", конечных символов";(Вы можете оставить точку с запятой, если вам нужно), и между ними могут быть любые символы, кроме кавычек, или, если есть кавычки, их нужно удвоить.

0 голосов
/ 19 февраля 2010

Если я правильно помню, вы должны использовать \ "" - двойные-двойные кавычки, чтобы хэшировать его для C #, и обратную косую черту, чтобы хэшировать его для регулярных выражений.

0 голосов
/ 19 февраля 2010

Как насчет регулярного выражения @\"([^\"]|\"\")*\"(?=[^\"])

Из-за жадного сопоставления в вашем механизме регулярных выражений, вероятно, не понадобится заключительное предложение lookahead, хотя оно более конкретное.

...