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

Я пытаюсь написать регулярное выражение, которое я могу использовать для преобразования правильно сформированной страницы HTML/php в копию простого текста/php. Я написал регулярное выражение для соответствия тегам HTML, оставив php:

<\w*[\s=\w-\d'"/!]*>

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

<!DOCTYPE HTML>
<html lang="en-US">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>

становится 7 пустых строк. Есть ли хороший способ заменить символы новой строки в этих строках без замены всех символов новой строки во всем документе?


person Brendon Dugan    schedule 21.12.2011    source источник
comment
Какой язык вы используете? Вы, вероятно, не можете решить это с помощью одного регулярного выражения. например вам нужно будет обрабатывать такие вещи, как: <?php echo('<b title="remove this too?">boldstuff</b>') ?>   -  person ridgerunner    schedule 21.12.2011
comment
На самом деле я использую инструмент под названием Regexr ( gskinner.com/RegExr ), и я использую его только для простые вещи. Я мог бы легко удалить этот материал вручную, я просто подумал, что регулярное выражение будет хорошим опытом обучения.   -  person Brendon Dugan    schedule 21.12.2011
comment
\s*<\/?\w*[^>]*>\s* Кажется, работает по приведенной выше ссылке.   -  person Kassym Dorsel    schedule 21.12.2011
comment
Кроме того, поскольку весь HTML, с которым я работаю, является моим собственным, и мне не особенно нравится встраивать html в эхо-операторы PHP (просто личное предпочтение), мое регулярное выражение работает хорошо без новых строк.   -  person Brendon Dugan    schedule 21.12.2011
comment
@Kassym: Это удаляет все разрывы строк и пробелы вокруг тегов, в результате чего получается одна строка беспорядочного текста.   -  person Brendon Dugan    schedule 21.12.2011
comment
Аааа - изучение регулярных выражений... Я приветствую вас! Обязательно выработайте привычку использовать режим свободного пространства 'x' с большим количеством комментариев и отступов (ознакомьтесь с некоторыми из моих ответов здесь для некоторых примеров). Если вы серьезно относитесь к изучению регулярных выражений, я настоятельно рекомендую прочитать: Мастерство регулярных выражений (3-е издание) — время, потраченное на чтение, окупится много раз. Также обязательно ознакомьтесь с: regular-expressions.info.   -  person ridgerunner    schedule 21.12.2011


Ответы (2)


Хорошо, я думаю, что понял. Хитрость заключается в том, чтобы удалить любые символы новой строки/пробела ПЕРЕД тегами html. Вот рабочая копия:

[\r\n\s]*?<\w*[\s=\w-\d'"/!]*>
person Brendon Dugan    schedule 21.12.2011

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

(?<=\w)<[^?]\w*[^>]*>| *<[^?]\w*[^>]*>\s* заменить нулевой строкой.

<!DOCTYPE HTML>
<html lang="en-US">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>

=> ""

<!DOCTYPE HTML>
<html lang="en-US">
<head>
    <meta charset="UTF-8">
    <title>hello</title>
    <title>hello</title>
</head>
<body>

=>

hello
hello
person Kassym Dorsel    schedule 21.12.2011
comment
Это также удаляет все теги php. - person Brendon Dugan; 21.12.2011
comment
Теперь не следует удалять теги php. У вас есть тестовый пример, который включает все с желаемым результатом? - person Kassym Dorsel; 21.12.2011