Регулярное выражение для бита класса div - PullRequest
0 голосов
/ 22 марта 2009

Если у меня есть div в HTML, который имеет class = "blah user_foo", что такое регулярное выражение Match (), чтобы получить бит 'foo'?

Ответы [ 3 ]

2 голосов
/ 22 марта 2009

Если атрибут class является единственным атрибутом требуемых элементов div, а значение class всегда имеет указанную структуру (фиксированная blah и затем user_foobar ), вы можете использовать это регулярное выражение:

<div\s+class\s*=\s*"blah user_([^"\s]+)

В противном случае попробуйте это регулярное выражение:

<div\s+(?:[^>"']+|"[^"]*"|'[^']*')*\bclass\s*=\s*"blah user_([^"\s]+)

Выражение (?:[^>"']+|"[^"]*"|'[^']*')* также учитывает, что в качестве значения атрибута допускается простой >.

Редактировать Оптимизировано регулярное выражение с предварительным утверждением для уменьшения обратного отслеживания:

<div\s+(?:(?:(?!class)[^>"']+(?:"[^"]*"|'[^']*')?)\s+)*class\s*=\s*"blah user_([^"\s]+)
1 голос
/ 22 марта 2009

Я не уверен, какой язык использует Match (), но, вероятно, он будет выглядеть примерно так:

<div[^>]+class="blah user_([^"]+)"

В зависимости от языка, 'foo' может храниться в \ 1, или в $ 1, или в другом месте.

1 голос
/ 22 марта 2009
/<div\s(?:[^>'"]*|".*?"|'.*?')*?\bclass\s*=\s*"blah user_(.*?)"/i

Выше обрабатывает пробелы; и другие вещи до спецификации класса.

Это не относится к случаю, когда class='single-quoted-something'; Вы можете сделать это с помощью обратной ссылки. Он также не обрабатывает искаженный HTML.

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