Как сгруппировать символы для выражения «вне диапазона» в PHP? - PullRequest
0 голосов
/ 06 января 2010

Как сгруппировать символы для выражения "вне диапазона" в PHP?

  1. элемент списка 1
  2. элемент списка 2
  3. элемент списка 3
  4. элемент списка 4
  5. ...

Я бы хотел сохранить все элементы li, кроме одного, с class = "second"

Это не работает: / (<Литий [^ (класс = "второй")] + </li>) / XSU

Ответы [ 2 ]

1 голос
/ 06 января 2010

Вы, вероятно, ищете что-то вроде этого:

/<li(?:(?!class=['"]second['"])[^>])*>(?:(?!<\/li>).)*<\/li>/

Идея основана на использовании отрицательных предварительных утверждений, сгруппированных в захватывающих выражениях. Сложные факторы здесь являются одной из основных причин, по которой люди не используют регулярные выражения для анализа HTML.

Объясняя RegExp:

/                - Start Regexp
 <li             - Match '<li'
 (?:             - Start Non-Capture Group
  (?!             - Start Negative Lookahead: 
                  - Ensure this group does not match (doesn't increment pointer either)
   class=          - Match 'class=' 
   ["']            - Match ' or "
   second          - Match 'second'
   ["']            - Match ' or "
  )               - End Negative Lookahead, 
                  - If it matched that whole segment, fail, otherwise:
  [^>]            - Match anything but '>'
 )*              - End Non-Capture Group - match 0 or more times
 >               - Match '>'
 (?:             - Start Non-Capture Group
  (?!             - Start negative lookahead
   <\/li>          - Match '</li>'
  )               - Ensure lookahead doesn't match, otherwise:
  .               - Capture any character
 )*              - End Non-Capture Group, match 0 or more times
 <\/li>          - Match '</li>'
/                - End RegExp
0 голосов
/ 06 января 2010

PHP не поддерживает "нативное" регулярное выражение, однако вы можете использовать preg_match для выполнения выражения регулярного выражения.

Редактировать: кроме того, вы не экранируете "/" в в своем выражении, которое прерывает вызов раньше.

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