Рекурсивное регулярное выражение, как сопоставить связанную строку с регулярным выражением? - PullRequest
0 голосов
/ 13 января 2010

... AA BB sysodufsoufdds BB AA ...

Где AA, BB может быть произвольной последовательной строкой без пробела.

Но я хочу получить лучшую пару : AA

Дополнительные примеры:

Ввод:

a HH CC abc CCЧЧ c

Выход:

ЧЧ

Вход:

x ГГГГ j ДД ГГ ДД hsuДД ГГ ДД к ГГГГ o

Вывод:

ГГГГ

Чтобы сделать мой вопрос более общим, как сопоставить определенный тег вHTML с регулярным выражением? Я видел различные посты, обсуждающие это, но ни один из них не дает ответа через регулярное выражение. Связанные вопросы: Я ищу регулярное выражение для удаления заданного (x) тега HTML изстрока

Ответы [ 2 ]

1 голос
/ 13 января 2010
\b(\w{2,})\b.*\b\1\b

будет соответствовать всему от первой серии последовательных символов до ее повторения. Обратная ссылка \1 будет содержать соответствующий шаблон (например, AA, HH или YYYY в ваших примерах).

\b необходимы для обеспечения границ слов.

РЕДАКТИРОВАТЬ: Ох. Я только что заметил, что вы хотите сделать что-то еще полностью, а именно, удалить HTML-теги из строки / файла. Не используйте для этого регулярные выражения. Я не буду цитировать статью, которую все остальные всегда цитируют, когда кто-то задает такой вопрос, но проблема (в двух словах) в том, что HTML не является регулярным, и попытка использовать регулярные выражения здесь просто напрашивается на неприятности. Вот почему никто (в здравом уме) не использует регулярные выражения для «разбора» HTML - они используют парсер.

Тем не менее, я использовал , используя регулярные выражения для извлечения данных из правильно сформированных источников XML, где я точно знал структуру и знал, что интересующие меня теги никогда не будут вложенными и т. Д. - но рекурсия с регулярными выражениями просто ужасно сложно, если это вообще работает (C # и Perl имеют некоторую поддержку, но это невероятно сложно).

0 голосов
/ 13 января 2010

Я думаю, вам нужны обратные ссылки здесь. Что-то вроде (пытаясь избежать специфики любого языка регулярных выражений):

(\w+) \w* (\w+) \w+ \1 \w* \2

При первом захвате вы получаете результат.

Я предположил, что одиночные пробелы разделяют строки, чтобы сделать его более понятным, вам, вероятно, нужно разрешить произвольный пробел с \s+, а \w (символы идентификатора: примерно [a-zA-Z9-0_]) - это правильное соответствие для строк .

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