HTML последний тег условного соответствия - PullRequest
0 голосов
/ 26 ноября 2008

У меня есть две строки

<EM>is <i>love</i></EM>,<PARTITION />

и

<EM>is <i>love</i>,<PARTITION />

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

Примечание: все может измениться, кроме тэгов EM и PARTITION.

Ответы [ 4 ]

1 голос
/ 26 ноября 2008

Если вы хотите полностью соответствовать строке, если она не содержит определенной подстроки, используйте регулярное выражение для соответствия подстроке и верните всю строку, если регулярное выражение не соответствует. Вы не сказали, какой язык вы используете, но вы пометили свой вопрос с помощью .NET, так что в C #:

if (Regex.IsMatch(subjectString, "</EM>")) {
    return null;
} else {
    return subjectString;
} 

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

if (subjectString.Contains("</EM>")) {
    return null;
} else {
    return subjectString;
} 

В ситуации, когда все, что вы можете использовать, это регулярное выражение, попробуйте это:

\A((?!</EM>).)*\Z

Решение только для регулярных выражений будет гораздо менее эффективным, чем приведенные выше примеры кода.

0 голосов
/ 28 ноября 2008

к счастью, пройдя через все это и проведя множество исследований, я нашел правильное выражение .......... вот вам всем спасибо ... спасибо всем, кто помог

<EM>\w*\s*\W*\S*[^\(</EM>)]<PARTITION[ ]/>

захватывает вторую строку, но оставляет первую… единственная проблема, с которой я столкнулся, состояла в том, чтобы отрицать комбинацию </EM>, которую я сделал с обратной косой чертой перед группой, это сводит на нет всю строку, а не принимает символы отдельно ....

0 голосов
/ 26 ноября 2008
^<EM>(?:(?<!</EM>).)*<PARTITION />$

работает. Но это зависит от целевого языка, например, JavaScript не поддерживает альтернативные утверждения ...

Более простое решение состоит в том, чтобы использовать ^<EM>.*<PARTITION />$ и просто проверить, что в строке не указано </EM>: я считаю, что RE мощные и обязательные, но я не пытаюсь делать все только в одном выражении. ..: -)

0 голосов
/ 26 ноября 2008

Не думаю, что вы задаете правильный вопрос. Это регулярное выражение полностью соответствует второй строке, а не первой:

/^<EM>is <i>love<\/i>,<PARTITION \/>$/

Но очевидно, что вы хотите сопоставить класс строк, а не только вторую строку ... верно? Определите класс строк, которым вы хотите соответствовать, и вы сможете быть на шаг ближе к получению нужного вам регулярного выражения.

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