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

Используя c # regex, я пытаюсь сопоставить вещи в кавычках, которые также не заключены в квадратные скобки, при этом игнорируя пробелы:

"blah" - match
("blah") - no match
( "blah") - no match
(  "blah") - no match

У меня есть (без спасения):

"(?<=[^(]\s")(.*?)"

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

Ответы [ 3 ]

3 голосов
/ 28 апреля 2009

Это должно работать:

/(?<![^(\s])\s*"([^"]*)"\s*(?![\s)])/
  • В первом (?<![^(\s]) утверждается, что перед строкой нет пробелов или левых скобок.

  • Тогда \s* будет соответствовать любому количеству пробельных символов.

  • ("[^"]*") будет соответствовать строке в кавычках и захватывать ее содержимое.

  • \s* будет соответствовать любому количеству пробельных символов.

  • В заключение, (?![\s)]) будет утверждать, что после пробела нет пробелов или правых скобок.

Вместе они проверяют, чтобы все пробелы соответствовали каждому \s*, и чтобы они не были в скобках.

1 голос
/ 28 апреля 2009

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

/\G                 # from the spot of the last match
  (?:               # GROUP OF: 
     [^("]*           # anything but open-paren and double quote.
     [(]              # an open-paren
     [^)]*            # anything but closing-paren
     [)]              # a closing-paren
  )*                # any number of times 
  [^"]*             # anything but double quote

  "([^"]*)"         # quote, sequence of anything except quote, then ending quote
/x
1 голос
/ 28 апреля 2009

В PCRE, насколько я знаю, внешний вид должен быть фиксированной ширины. Если это останется верным в C # движке PCRE, то вы не сможете сделать это так, как пытаетесь.

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