#regex #ruby
#регулярное выражение #ruby
Вопрос:
У меня есть содержимое xml, как показано ниже
<html>
<head><title>502 Bad Gateway</title></head>
<body>
<center><h1>502 Bad Gateway</h1></center>
</body>
</html>
В приведенном выше я хочу отобразить все, кроме 502 Bad Gateway в заголовке.
Я использовал приведенное ниже регулярное выражение для сопоставления 502 с плохим шлюзом
(?<=title>)(.*?)(?=</title>)
Может кто-нибудь сказать мне, как это отрицать?
Я попробовал приведенные ниже предложения
(?!((?<=title>)(.*?)(?=</title>)))
[^((?<=title>)(.*?)(?=</title>))]
Но они не сработали.
Я использую ruby regex
Комментарии:
1. Какой язык / движок регулярных выражений вы используете? Рекомендуется включить эту информацию, поскольку функции различаются у разных движков регулярных выражений.
2. Что именно вы хотите сделать? Вы хотите удалить заголовок из строки? Затем просто используйте
re.sub
(или аналогичные методы на других языках)3. Я использую ruby regex
Ответ №1:
Вы хотите получить все, что не соответствует регулярному выражению?
Сохраните свой результат на языке, который вы предпочитаете.
Используйте некоторые инструменты, например:
- WinMerge
- Вне сравнения
- KDiff3
- DiffMerge
- Слияние
- …
Некоторые из них могут генерировать исправление. Используйте File -> Open … чтобы открыть две версии для сравнения. Это даст вам хорошее представление о том, что вы изменили. https://docs.moodle.org/dev/How_to_create_a_patch#Creating_a_patch_using_WinMerge
Ответ №2:
Вы могли бы просто использовать sub
для удаления «502 Bad Gateway» в title
:
xml = "<head><title>502 Bad Gateway</title></head>"
xml.sub("<title>502 Bad Gateway</title>", "<title></title>")
# => "<head><title></title></head>"
Ответ №3:
Не очень знаком с ruby, но я предполагаю, что функции регулярных выражений схожи с PCRE, который поддерживает управляющие глаголы и рекурсию.
Вот регулярное выражение, которое соответствует вашему описанию:
((?<=title>)502 Bad Gateway(?=</title>))(*SKIP)(*F)|(?:(?!(?1))[sS])
Смотрите Доказательство
Комментарии:
1. Привет, Хао Ву, это работает только для PHP<7.3. Но я работаю в ruby regex engine, в котором это не работает.