Модераторы: LSD

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Regex 
:(
    Опции темы
Самозванка
Дата 8.3.2012, 05:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Девушка в стиле IT
**


Профиль
Группа: Завсегдатай
Сообщений: 484
Регистрация: 5.9.2006
Где: USA




Думала думала где тему создать, но лучшего раздела не нашла. помогите с регулярным выражением плиз.

Есть:

Код

<span id="blabalbla" rrr="kuku" type="grid">


или

Код

<span type="grid" id="blabalbla" rrr="kuku">


Регулярным выражением надо получать всегда вот это 

Код

<span type="grid"
 

То есть как мне избежать буквы и пробелы те, которые есть между ними, если они есть.

ЗЫю Сделайте мне подарок на 8 марта) помогите))  smile 


PM MAIL ICQ   Вверх
Akella
Дата 8.3.2012, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант




в Php есть smile

Добавлено @ 10:42
Вот тебе выражение:

Код
<span id="([^"]+)"


Добавлено @ 10:42
С праздником!!!!!
Нескучных тебе тех. заданий  smile 
PM MAIL   Вверх
diadiavova
Дата 8.3.2012, 10:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте




Цитата(Самозванка @  8.3.2012,  06:14 Найти цитируемый пост)
Думала думала где тему создать, но лучшего раздела не нашла.

Ну так еще бы: посещаемость-то бешеная smile 
Цитата(Самозванка @  8.3.2012,  06:14 Найти цитируемый пост)
То есть как мне избежать буквы и пробелы те, которые есть между ними, если они есть.

Если я правильно понял вопрос, то никак. Регулярное выражение поможет тебе извлечь подстроку из строки по заданным параметрам или, скажем, найти строку, содержащую определенную подстроку, а ты хочешь с его помощью извлекать подстроку, которой по сути дела нет в строке. 
Тебе надо <span и type="grid" извлекать по отдельности, а потом уже программно объединять строки. То есть имя тега можно извлечь как-то так
<\S+, а атрибут так type="[^"]*" и объединить потом.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Самозванка
Дата 9.3.2012, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Девушка в стиле IT
**


Профиль
Группа: Завсегдатай
Сообщений: 484
Регистрация: 5.9.2006
Где: USA




спасибо  smile 
PM MAIL ICQ   Вверх
LSD
Дата 9.3.2012, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin




Есть подозрение, что тут бы хорошо подошел бы XPath

Добавлено через 1 минуту и 2 секунды
А в штатах не отмечается международный женский день? smile 


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Akella
Дата 9.3.2012, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант




diadiavova прав
я недочитав, поспешил smile

Тебе нужно по отдельно искать подстроки, а потом склеивать их.
Можно попробовать использовать replace в регулярных выражениях, чтобы вот эту часть id="blabalbla" rrr="kuku" можно было удалять
PM MAIL   Вверх
Самозванка
Дата 9.3.2012, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Девушка в стиле IT
**


Профиль
Группа: Завсегдатай
Сообщений: 484
Регистрация: 5.9.2006
Где: USA




Цитата(LSD @  9.3.2012,  16:33 Найти цитируемый пост)
Есть подозрение, что тут бы хорошо подошел бы XPath


Мне просто хотелось исправить чутка существующий код, не перелопачивая всё. Но походу легким испугом тут не отделаешься))

8 марта не отмечается, но русские коллеги поздравили меня вчера букетом роз красивеньким)) (см. Твиттер) и тортом вкусным превкусным)

PM MAIL ICQ   Вверх
diadiavova
Дата 9.3.2012, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте




Цитата(Самозванка @  9.3.2012,  20:49 Найти цитируемый пост)
Мне просто хотелось исправить чутка существующий код, не перелопачивая всё. Но походу легким испугом тут не отделаешься))

Средствами xslt подобные задачи решаются элементарно.
Цитата(Akella @  9.3.2012,  19:13 Найти цитируемый пост)
diadiavova прав

Тоже мне новость smile 


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Zloxa
Дата 11.3.2012, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008




Цитата(diadiavova @  8.3.2012,  10:42 Найти цитируемый пост)
Регулярное выражение поможет тебе извлечь подстроку из строки по заданным параметрам или, скажем, найти строку, содержащую определенную подстроку, а ты хочешь с его помощью извлекать подстроку, которой по сути дела нет в строке. 

так-то вообще регекспом можно и реплейснуть
Код

SQL> with t as (
  2    select '<hello/><span id="blabalbla" rrr="kuku" type="grid"><span type="grid" id="blabalbla" rrr="kuku"><world/>' val   from dual
  3  )
  4  select regexp_replace(val,'<span.+?>','<span type="grid">') result
  5  from t
  6  ;
 
RESULT
----------------------------------------------------
<hello/><span type="grid"><span type="grid"><world/>



--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
diadiavova
Дата 11.3.2012, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте




Цитата(Zloxa @  11.3.2012,  14:02 Найти цитируемый пост)
так-то вообще регекспом можно и реплейснуть

Ну ты же понимаешь, что пример, приведенный ТС - иллюстративный. А в реальном примере, возможно и сохранить придется несколько больше атрибутов и количество и имена удаляемых может варьироваться и порядок следования тоже может быть разным. В таких условиях реплейс может оказаться куда более громоздким решением, поскольку придется как-то указать какие именно атрибуты удалять и удалять возможно придется по одному, поскольку они вполне могут быть перемешаны с нужными. Я ведь сказал на случай, если выходная строка содержит данные из исходной и данные эти заранее неизвестны( ну к примеру известно имя атрибута, но неизвестно значение), а ты говоришь о случае, когда строка замены всегда одинакова.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Zloxa
Дата 11.3.2012, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008




Цитата(diadiavova @  11.3.2012,  13:21 Найти цитируемый пост)
А в реальном примере, возможно и сохранить придется несколько больше атрибутов и количество и имена удаляемых может варьироваться и порядок следования тоже может быть разным.

Да, в общем случае - да. 
Но тут ведь вполне может быть и очень даже частный случай. Я так понимаю цель лишь упорядочить атрибуты. В шаблоне замены могут быть использованы значения патернов, найденных регекспом. Оракля их замещает через косую палку. Жава - через доллар. Как там у вас вдоднете - я хз, но думаю, доднет тут не отстанет
Код

  4  select regexp_replace(val,'<span(\s+((id=("[^"]*?"))|(type=("[^"]*?"))|(rrr=("[^"]*?")))){3}>','<span type=\6 id=\4 rrr=\8>') result
  5  from t
  6  /
 
RESULT
--------------------------------------------------------------------------------
<hello/><span type="grid" id="blabalbla" rrr="kuku"><span type="grid" id="blabalbla" rrr="kuku"><world/>
 
 


К тому же, я так понимаю, тут HTML, в общем случае, очень даже не well formed XML и xsl трасформатор его не сожрет. Или сейчас  трансформаторы уже научились на вход брать всякий треш(с точки зрения XML)? Если таки нет, всяко придется париться регескпами. smile 

Это сообщение отредактировал(а) Zloxa - 11.3.2012, 14:32


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Shaggie
Дата 11.3.2012, 14:10 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 570
Регистрация: 21.12.2006
Где: outer space




Вы чего?
Регулярное выражение конкретно задачу из первого поста решает влёт.
Только оно сформулировано странновато, поэтому пусть будет сразу два решения, на всякий случай.
Находим все спаны, в которых есть элемент "type" и вырезаем из них остальные элементы
Код

s/<span.*?(type="[^"]*?").*?>/<span \1>/

Находим все спаны с "type" "grid" и вырезаем из них остальные элементы
Код

s/<span.*?(type="grid").*?>/<span \1>/

Что-то вроде того.
Регулярки в данном случае не идеальное, но вполне работающее решение

Цитата(diadiavova @  11.3.2012,  14:21 Найти цитируемый пост)
 А в реальном примере, возможно и сохранить придется несколько больше атрибутов и количество и имена удаляемых может варьироваться и порядок следования тоже может быть разным.

Можно вынести отдельные куски регулярок в переменные и склеивать в разном порядке. На выходе будет что-то напоминающее несложную грамматику.
Хотя вообще это уже задача для отдельного инструмента.


--------------------
Цитата(alina3000 @  6.3.2014,  10:47 Найти цитируемый пост)
Сорри что не по теме 
PM MAIL ICQ GTalk Jabber   Вверх
diadiavova
Дата 11.3.2012, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте




Цитата(Zloxa @  11.3.2012,  15:03 Найти цитируемый пост)
Но тут ведь вполне может быть и очень даже частный случай. Я так понимаю цель лишь упорядочить атрибуты.

А я понял, что цель - удалить все лишнее. Ну сформулирована задача, конечно, непонятно, но, тем не менее, кое-что можно все-таки и из этой формулировки извлечь. Изначально ведь не было вопроса как в некоем документе найти все спаны и заменить их спаном конкретного вида. Задача формулировалась так, что первоначально есть строка, содержащая именно текст открывающего тега, то я так понимаю, сам тег уже найден. Если бы его нужно было заменить конкретной строкой, то регулярка тут вообще никаким боком. А уж коль скоро вопрос был о регулярке, то и вывод отсюда такой, что из исходной строки надо извлечь какие-то данные и использовать их в строке результата. Разве нет?
И потом, зачем нужно упорядочивать атрибуты? Что хмл, что в хтмл порядок их следования на смысл элемента никак не влияет.
Цитата(Zloxa @  11.3.2012,  15:03 Найти цитируемый пост)
К тому же, я так понимаю, тут HTML, в общем случае, очень даже не well formed XML и xsl трасформатор его не сожрет.

Смотря чем пользоваться, я не знаю на чем это делает Самозванка, но вообще существуют библиотеки, которые парсят хтмл в вид пригодный для трансформации(например в хмл), я собственно об этом говорил.
Цитата(Zloxa @  11.3.2012,  15:03 Найти цитируемый пост)
В шаблоне замены могут быть использованы значения патернов, найденных регекспом.

Ну да, это вариант
Цитата(Shaggie @  11.3.2012,  15:10 Найти цитируемый пост)
Только оно сформулировано странновато

 smile 
Цитата(Zloxa @  11.3.2012,  15:03 Найти цитируемый пост)
Жава - через доллар. Как там у вас вдоднете - я хз, но думаю, доднет тут не отстанет
Да так же как и жабе, ну есть еще вариант замены с помощью делегата, но тут это лишнее конечно.



--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Zloxa
Дата 11.3.2012, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008




Цитата(diadiavova @ 11.3.2012,  14:40)
Цитата(Shaggie @  11.3.2012,  15:10 Найти цитируемый пост)
Только оно сформулировано странновато

 smile 

А я бы сказал, что очень даже мило.

Гляньте как мальчики все попересрались промежсобою. smile 


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
LSD
Дата 12.3.2012, 10:21 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin




Цитата(Shaggie @  11.3.2012,  15:10 Найти цитируемый пост)
Регулярное выражение конкретно задачу из первого поста решает влёт.

Пришел гуру регулярок и всех утер smile 


Цитата(Самозванка @  9.3.2012,  20:49 Найти цитируемый пост)
тортом вкусным превкусным)

Ты с ними поосторожней, у них явно есть коварные планы насчет твоей фигуры smile 


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила раздела «Флейм»
Sneg0k

Добро пожаловать в «Флейм».

В разделе не действуют многие правила:

  • Можно оффтопить(умеренно)
  • Можно общаться на темы, не только связанные с программированием.

Строго запрещено:

  • Размещать рекламу
  • Обсуждать политику
  • Оскорблять друг-друга и переходить на личности
  • Наезжать, провоцировать других участников форума
  • Материться
  • Троллить

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


Глас Винграда:


Глас Философии:


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Sneg0k

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Флейм | Следующая тема »


 




[ Время генерации скрипта: 0.0640 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.