Регулярное выражение для исключения нескольких строк - PullRequest
1 голос
/ 26 августа 2011

Можно использовать справку по поиску в Regex с помощью функции поиска NetBeans 7.01.

Я пытаюсь исключить несколько строк.В частности, целевые строки:

<div class="table_left">
<div class="table_right">
<div class="table_clear">

Мне нужно сопоставить только третий и другие классы Div, которые не являются ни table_left, ни table_right.
Я пробовал:

class="table_(((?!left).*)|((?!right).*))

и

class="table_(left|right){0}

При вставке моей первой строки регулярных выражений я понял, что сопоставляю не справа ИЛИ не слева, что возвращает оба.Как правильно указать два условия?Оператор and?

Радости поиска слов, которые также являются логическими операторами ...

1 Ответ

1 голос
/ 26 августа 2011

Попробуйте этот шаблон:

<div\s+class="(?!table_(left|right))[^"]+"

, который не будет соответствовать:

<div class="table_left">
<div class="table_right">

, но будет соответствовать:

<div class="table_clear">
<div class="foo">

РЕДАКТИРОВАТЬ

HT писал:

Мне нужно сопоставлять только те классы, которые начинаются с таблицы, но не справа или слева

А, ладно, это будет выглядеть так:

<div\s+class="table_(?!left|right)[^"]+"

или

<div\s+class="table(?!_left|_right)[^"]+"

, как вы уже нашли себя (но я включил его в свой ответ дляради полноты).

Краткое объяснение модели <div\s+class="table_(?!left|right)[^"]+":

<div                         # match '<div'
\s+                          # match one ore more space chars
class="table_(?!left|right)  # match 'class="table_' only if it is not followed by 'left' or 'right'
[^"]+                        # match one or more characters other than '"'
"                            # match a '"'
...