регулярное выражение: сопоставление пробелов, которые не заключены в [] - PullRequest
4 голосов
/ 23 мая 2010

Например, для этой строки,

div.img-wrapper img[title="Hello world"]

Я хочу сопоставить первый пробел, но не второй пробел (который заключен в []). Что такое регулярное выражение?

1 Ответ

4 голосов
/ 23 мая 2010

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

_(?>[^[\]]*(\[|$))

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

_          Match the space and
(?>        assert that it is not inside brackets
  [^[\]]*  by matching all characters except brackets
  (        followed by either
    \[     an opening bracket (a space inside brackets
           will have a closing bracket at this position)
    |      or
    $      or no more characters (end of line).
  )
)

UPDATE

Вот еще одно (и более красивое) решение, использующее утверждение с отрицательным взглядом в будущее.

_(?![^[\]]*])

Он утверждает, что следующая скобка после пробела не является закрывающей скобкой.

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