RegExp получить строку внутри строки - PullRequest
2 голосов
/ 19 августа 2010

Предположим, у нас есть что-то вроде этого:

<div1>
    <h1>text1</h1>
    <h1>text2</h1>
</div1>
<div2>
    <h1>text3</h1>
</div2>

Используя RegExp, нам нужно получить text1 и text2, но не text3.

Как это сделать?

Заранее спасибо.

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

(?siU)<h1>(.*)</h1> будет анализировать все три строки, но как получить только первые две?

EDIT2: Вот еще один довольно тупой пример.:)

Section1

This is a "very" nice sentence.
It has "just" a few words.

Section2

This is "only" an example.

The End

Мне нужны слова в кавычках из первого, но не из второго раздела.

Еще раз, (?siU)"(.*)" возвращает слова в кавычках из всего текста, а мне нужны только слова между словами Section1 и Section2.

Это для приложения "Rainmeter" , которое, очевидно, использует синтаксис Perl regex.

Извините, но я не могу 'объяснить это лучше.:)

Ответы [ 2 ]

2 голосов
/ 19 августа 2010

Для общего случая двух приведенных примеров - для использования в регулярном выражении Rainmeter - вы можете использовать:

(?siU)<h1>(.*)</h1>(?=.+<div2>) для первого образца и

(?siU)"(.*)"(?=.+Section2) за секунду.

Обратите внимание, что Rainmeter, похоже, спасает вас от неприятностей, но вам может потребоваться изменить " на \", выше.

Оба используют Позитивный взгляд , но будьте осторожны: оба решения потерпят неудачу в случае вложенных тегов / структур или при наличии нескольких Разделов1 и Разделов2. Regex - не лучший инструмент для такого анализа.

Но, может быть, этого достаточно для ваших текущих потребностей?

2 голосов
/ 19 августа 2010

Используйте библиотеку DOM и getElementsByTagName('div'), и вы получите нодлист.Вы можете ссылаться на первый элемент с помощью ->item(0), а затем getElementsByTagName('h1'), используя div в качестве узла контекста, захватить текст с помощью свойства ->nodeValue.

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