Что нового

[RegExp] Содержимое между тегами исключая сами тэги

Статус
Закрыто для дальнейших ответов.

vcomp71

Осваивающий
Сообщения
431
Репутация
25
Что-то сложно мне понимаются регулярные выражения...
Простейший пример
Как выбрать содержимое между двумя элементами текста, исключив эти элементы текста?
Например есть выражение
<div class = "1">Ваше число 140 </div>
Соответственно между элементами текста
'<div class = "1">Ваше число ' и ' </div>' находится 140 вот его и надо получить


(?i)<div class = "1">Ваше число .*?(\d+).*? </div>
Вот так мы получим ВСЮ строку, а надо только число... Как их исключить?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Vlasssov
Код:
$sString = '<div class = "1">Ваше число 140</div>'
$sNum = StringRegExpReplace($sString, '(?s).*?class = "1">.*?(\d+).*?</?.*', '\1')
MsgBox(64, 'Info', $sNum)
 
Автор
vcomp71

vcomp71

Осваивающий
Сообщения
431
Репутация
25
А зачем заменять-то?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Vlasssov [?]
А зачем заменять-то?
Не понял, что заменять? :wacko:

Или Вы это имели в виду?
Код:
$sString = '<div class = "1">Ваше число 140           </div>'
$aNum = StringRegExp($sString, 'class = "1">.*?(\d+).*?<', 3)
MsgBox(64, 'Info', $aNum[0])
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Vlasssov [?]
А зачем заменять-то?
Вам нужно было число 140? Вот оно в $sNum и содержится! Или вам охота после RegExp с массивами возиться? :smile:
 
Автор
vcomp71

vcomp71

Осваивающий
Сообщения
431
Репутация
25
Ага, а если в текстовой переменной есть два таких вот фрагмента
<div class = "1">Это не ваше число 150 </div><div class = "1">Ваше число 140 </div>
:shok:
Каков результат будет?
Тут вопрос и стоит именно в том, чтобы выдрать текст между двумя заранее известными фрагментами. А представленный вариант решает другую задачу. Я ж всего лишь пример привел...
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Vlasssov
Код:
$sString = '<div class = "1"> Ваше 1-ое число 140 </div>'
$sNum = StringRegExpReplace($sString, '(?s).*?class = "1">.*?(?:\d+).*?(\d+).*?</?.*', '\1')
MsgBox(64, 'Second', $sNum)

$sString_1 = '<div class = "1"> Ваше 33-ье число 140 </div>'
$sNum_1 = StringRegExpReplace($sString_1, '(?s).*?class = "1">.*?(\d+).*?(?:\d+).*?</?.*', '\1')
MsgBox(64, 'First', $sNum_1)

Или
Код:
$sString = '<div class = "1"> Ваше 1-ое число 140 </div>'
$aNum = StringRegExp($sString, 'class = "1">.*?(?:\d+).*?(\d+).*?</', 3)
MsgBox(64, 'Second', $aNum[0])

$sString_1 = '<div class = "1"> Ваше 33-ье число 140 </div>'
$aNum_1 = StringRegExp($sString_1, 'class = "1">.*?(\d+).*?(?:\d+).*?</', 3)
MsgBox(64, 'First', $aNum_1[0])
 
Автор
vcomp71

vcomp71

Осваивающий
Сообщения
431
Репутация
25
madmasles сказал(а):
Vlasssov [?]
Я ж всего лишь пример привел...
Какой пример - такой ответ. ;)
Куриманством занимаемся? Сообщение еще раз прочитай первое.. Процитировать?
Цитирую!!!
Как выбрать содержимое между двумя элементами текста, исключив эти элементы текста?
И иде там про число??? Вы хоть вопросы-то читайте!
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
OffTopic:
Vlasssov [?]
'<div class = "1">Ваше число ' и ' </div>' находится 140 вот его и надо получить
Это Ваш вопрос? :wacko:
Минус мне в репутацию за ответы на Ваши Вопросы? :shok: Спасибо.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Vlasssov [?]
Я ж всего лишь пример привел...
так дело не пойдет. рег. выражения крайней чувствительны ко всем условиям. на все случаи примерами не напасешься. поэтому если требуется использовать составить рег. выражения, нужно всегда для себя (или для других, кто пытается его составить за тебя) выделить три пункта
1. что есть переменная часть текста
2. что есть постоянная
3. какая часть текста может как присутствовать так и отсутствовать.
это семантический шаблон, его составляют на вербальном уровне, то есть общими но конкретными фразами. после этого можно уже переводить на формальный язык регулярных выражений.
madmasles [?]
Минус мне в репутацию за ответы на Ваши Вопросы? Спасибо.
мда... нехорошо получается.
 
Автор
vcomp71

vcomp71

Осваивающий
Сообщения
431
Репутация
25
madmasles сказал(а):
OffTopic:
Vlasssov [?]
'<div class = "1">Ваше число ' и ' </div>' находится 140 вот его и надо получить
Это Ваш вопрос? :wacko:
Минус мне в репутацию за ответы на Ваши Вопросы? :shok: Спасибо.
Ваш ответ - типично лузерский. Для того чтобы захватить часть текста, надо ставить круглые скобки, вокруг набора элементов

Начальный фрагмент(Что надо захватить)Конечный фрагмент
В моем случае
(?i)(?s)<div class = "1">Ваше число .*?(\d+).*? </div>

А вы написали ГЛУПОСТЬ.

Всё. Просто ни по одной ссылке такого не сказано. Народ начинает лепить абсолютно левые примеры, рассказывать как корабли бороздят просторы Большого театра
http://citforum.ru/internet/articles/regexp_tutorial/

а данный случай - типичный. А вот то что вы написали - это решение конкретной задачи, которую никто решать не собирался. Но если вы такой добрый - может и весь код за меня напишите? Или опять про деньги рассуждать будем.

Вы знаете, когда начинаете дурить другого, сами не окажитесь дураком. Я на данном форуме уже встречал подобных шутников.
http://autoit-script.ru/index.php?topic=251.msg1738#msg1738
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Vlasssov
мда... раз тебе помощь не нужна, то, возможно, и тему стоит прикрыть
 
Автор
vcomp71

vcomp71

Осваивающий
Сообщения
431
Репутация
25
Kaster сказал(а):
Vlasssov
мда... раз тебе помощь не нужна, то, возможно, и тему стоит прикрыть
Была нужна. Но получил не помощь, а оскорбления в свой адрес. Закрываем тему.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Vlasssov [?]
Была нужна. Но получил не помощь, а оскорбления в свой адрес
Кажется это ты тут оскорблениями занимаешься, покажи где тебя тут оскорбили?

P.S
И знай, это тебе нужна помощь, тебе тут никто и ни чем не обязан.
 
Автор
vcomp71

vcomp71

Осваивающий
Сообщения
431
Репутация
25
Мне помощь не нужна, нужен совет, если я в чем-то элементарном разобраться не могу. Ну не доходит.
А где там по ссылке оскорбление? А вот товарищ вполне себе оскорбил
Вот мое спокойное пояснение, что меня неправильно поняли.

Ага, а если в текстовой переменной есть два таких вот фрагмента
<div class = "1">Это не ваше число 150 </div><div class = "1">Ваше число 140 </div>
:shok:
Каков результат будет?
Тут вопрос и стоит именно в том, чтобы выдрать текст между двумя заранее известными фрагментами. А представленный вариант решает другую задачу. Я ж всего лишь пример привел...


Вот и ответьте себе - человек, просто тупит, или все таки оскорбить пытается?

Действительно, никто мне ничем не обязан, в том числе не обязан и хамить. И если вопрос не понятен, можно переспросить, а не смайлики подмигивающие писать. Тем более, что просто я не въехал, с этими терминами "жадные" скобки и тому подобное. Более того, если скачать вот такое вот приложение
http://www.regexbuddy.com/
И написать там запрос,

(?i)(?s)<div class = "1">Ваше число .*?(\d+).*? </div>

То вместо числа он выделит в тестовом окне ПОЛНУЮ СТРОКУ, а не те символы которые стоят в круглых скобках, что собственно и послужило моему недоумению. Вроде как выделить надо число, а там вся строка. После, вставив, в функцию типа
Код:
$s1 = StringRegExp($htm,'(?i)(?s)<div class = "1">Ваше число .*?(\d+).*? </div>',3)

уже в AutoIt получил искомый результат.

Если не понимаете сути вопроса - то не надо отвечать, вы никому , действительно, не обязаны. А потом комментировать минусы в репутации, которые я поставил абсолютно заслужено, прочтя уже третий неадекватный ответ, который напоминал просто откровенный флуд. Не надо пытаться издеваться над человеком, который якобы, еще раз подчеркиваю, якобы, не разбирается в регулярных выражениях. Тем более что книжка есть.

Фридл Дж. Регулярные выражения

То есть я пока ее не прочитал, можно поражать своими знаниями? И всех остальных начинающих изучать Autoit?
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Vlasssov [?]
Вот и ответьте себе - человек, просто тупит, или все таки оскорбить пытается?
Человек пытается намекнуть на то, что вопросы нужно задавать предоставляя все подробности. Ничего оскорбительного в этом нет.

[?]
Если не понимаете сути вопроса - то не надо отвечать, вы никому , действительно, не обязаны
С таким подходом ты мало от кого помощи добъёшься.

То есть я пока ее не прочитал, можно поражать своими знаниями? И всех остальных начинающих изучать Autoit?
Прими успокоительное, никто тут никого ничем не поражает.
 
Статус
Закрыто для дальнейших ответов.
Верх