Условное соответствие последнего тега HTML

У меня две струны

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

и

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

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

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

Уточнение: какие части являются переменными? Могу ли я иметь что-нибудь, кроме "is love", можно ли <b> и <a href ..? Это слишком расплывчато.

Stefan Mai 26.11.2008 09:15

да, вы можете иметь все переменные, кроме тегов EM и PARTITION

shabby 26.11.2008 09:18
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
257
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

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

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

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

ну, извините, я имел в виду, что если строка запускается во второй строке, она соответствует ей и ничего не соответствует, если запускается в первой строке

shabby 26.11.2008 09:17
^<EM>(?:(?<!</EM>).)*<PARTITION />$

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

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

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

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

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

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

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

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

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

Ответ принят как подходящий

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

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

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

Это не сработает, поскольку «[^ \ (</EM>)]» описывает класс символов, а не только «</EM>», как предполагалось.

Gumbo 20.01.2009 09:57

Другие вопросы по теме