RegEx: Соответствующий текст, который не находится внутри тега HTML и является его частью - PullRequest
1 голос
/ 09 июня 2009

как сопоставить все содержимое вне тега HTML?

Мой псевдо-HTML:

<h1>aaa</h1>
bbb <img src="bla" /> ccc
<div>ddd</div>

Я использовал регулярное выражение,

(?<=^|>)[^><]+?(?=<|$)

, который дал бы мне: "AAA BBQ CCD DDD"

Все, что мне нужно, это способ игнорировать HTML-теги с возвращением: "bbb ccc"

Ответы [ 3 ]

6 голосов
/ 09 июня 2009

Регулярные выражения - это неуклюжий и ненадежный способ работы с разметкой. Я бы предложил использовать синтаксический анализатор DOM, например SimpleHtmlDom :

//get the textual content of all hyperlinks on specified page.
//you can use selectors, e.g. 'a.pretty' - see the docs
echo file_get_html('http://www.example.org')->find('a')->plaintext; 

Если вы хотите сделать это на клиенте, вы можете использовать такую ​​библиотеку, как jQuery , например:

$('a').each(function() {
    alert($(this).text());
});
0 голосов
/ 10 июня 2009

Спасибо всем,

выражения обоих вместе были бы грязной работой, но я бы хотел обратный вывод.

(\<(.*?)\>)(.*?)(\<\/(.*?)\>)|(<[a-zA-Z\/][^>]*>)

как псевдострока:

<h1>aaa</h1>

bbb <img src="bla" /> ccc

<div>ddd</div> jhgvjhgjh zhg zt <div>ddd</div>

<div>dsada</div> hbhgjh

Для упрощения я использую этот инструмент .

0 голосов
/ 09 июня 2009

Ищите подходящее регулярное выражение для совпадения с полными тегами (например, в библиотеке типа http://regexlib.com/) и удаляйте их с помощью оператора замены) s ///. Тогда используйте остальное.

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