считать кавычки в строке без обратной косой черты перед ними - PullRequest
1 голос
/ 30 июня 2010

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

  • "\"Some text
  • "\"Some \"text

код, который я ранее использовал String#count('"') очевидно, это не достаточно хорошо

Когда я подсчитываю кавычки в обоих этих примерах, мне нужен только результат 1

Я искал здесь похожие вопросы и пытался использовать lookbehinds, но не могу заставить их работать в ruby.

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

  • /[^\\]"/
  • ^"((?<!\\)[^"]+)"
  • ^"([^"]|(?<!\)\\")"

Никто из них не дает мне результаты, полученные после

Может быть, регулярное выражение не способ сделать это. Может быть, программный подход является решением

Ответы [ 2 ]

3 голосов
/ 30 июня 2010

Как насчет string.count('"') - string.count("\\"")?

2 голосов
/ 30 июня 2010
result = subject.scan(
    /(?:        # match either
     ^         # start-of-string\/line
    |          # or
     \G        # the position where the previous match ended
    |          # or
     [^\\]     # one non-backslash character
    )          # then
    (\\\\)*    # match an even number of backslashes (0 is even, too)
    "          # match a quote/x)

дает вам массив всех символов кавычек (возможно, с предшествующим символом не кавычек), кроме неэкранированных.

Якорь \G необходим для соответствия последовательных кавычек, а (\\\\)* гарантирует, что обратные слеши считаются экранирующими символами только в том случае, если они встречаются в нечетных числах перед кавычкой (чтобы учесть правильное предупреждение Амаргоша).

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