imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 13.10.2005, 16:25     # 1
Hubbitus
мод
IMHO Кодер-200(6,7,8)
 
Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734

Hubbitus Бог с наворотамиHubbitus Бог с наворотами
Hubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотами
И снова регулярные выражения

Уважаемые, спасибо за Ваше внимание вообще.

Задача в общем виде:

Нужно сопоставить шаблону ЛИБО одно слово (разделение пробелом) ЛИБО все выражение в кавычках (пусть в одинарных, не суть)

Чтобы все однозначно всеми понималось, пару примеров:
1) Есть текст $text = '123456 qaz qwerty';
Хочу чтобы выбралось 123456
2) Есть текст $text = "'123456 qaz' qwerty";
Хочу чтобы выбралось 123456 qaz - Без кавычек

Итак, в чем основная сложность и до чего я пока додумался:
1)
PHP код:
preg_match_all("#\'(.*?)\'|(\d+)#i"$text$matchesPREG_SET_ORDER); 
2)
PHP код:
preg_match_all("#(\'.*?\'|\d+)#i"$text$matchesPREG_SET_ORDER); 
Вот, впринципе, обе решают какбы поставленную задачу, но оба варианта не доконца/не так как бы хотелось:
В первом случае номера совпадений для выражения в кавычках и для одиночного слова будут разными, порядковыми (1 и 2 соответственно), это и понятно - ведь 2 раза захватывается паттерн, два раза круглые скобки, но хочется чтобы было в одном элементе.
Во втором случае элемент 1, НО, захватываются еще и сами кавычки, а хотелось бы без них (чтобы потом не анализировать это). Как их исключить там - пока не додумался.

Буду благодарен свежим мыслям и конкретным решениям.
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям!

Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru
Pahan-Hubbitus.
Hubbitus вне форума  
Старый 22.06.2006, 18:26     # 2
crawler
Full Member
 
Регистрация: 11.12.2002
Сообщения: 864

crawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собой
Подниму тему.
Возможно ли найти строку НЕ содержащюю подстроку ? Что-то вида
Код:
.*!(ТЕХТ).*
чтобы в результате поиска на отсутвие "пять":
Код:
1. Раз два три
2. четыре пять
3. шесть семь
нашла 1 и 3 строку.

Нужно это поставить в linefilter WinMerge (там стоит автоматический NOT), для поиска измененных строк содержащих определенное слово.

Последний раз редактировалось crawler; 22.06.2006 в 18:28.
crawler вне форума  
Старый 23.06.2006, 06:52     # 3
Gr@nd@d
Full Member
 
Аватар для Gr@nd@d
 
Регистрация: 15.09.2004
Адрес: Палата74@Дурдом.RU
Пол: Male
Сообщения: 593

Gr@nd@d ГуруGr@nd@d ГуруGr@nd@d ГуруGr@nd@d ГуруGr@nd@d ГуруGr@nd@d ГуруGr@nd@d ГуруGr@nd@d ГуруGr@nd@d ГуруGr@nd@d ГуруGr@nd@d ГуруGr@nd@d ГуруGr@nd@d ГуруGr@nd@d ГуруGr@nd@d ГуруGr@nd@d Гуру
Цитата:
Сообщение от crawler
Возможно ли найти строку НЕ содержащюю подстроку ?
Imho чисто самим выражением в общем случае нельзя.
Попробуй поиграться с модификатором "?!", например: (?!ТвойТекст), только без всяких там ".*" - эти схавают что угодно
__________________
Количество ума на Земле постоянно, а население растёт...
Gr@nd@d вне форума  
Старый 26.06.2006, 12:49     # 4
EvroStandart
Full Member
 
Аватар для EvroStandart
 
Регистрация: 20.01.2004
Адрес: Таллинн
Пол: Male
Сообщения: 623

EvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собой
А по моему очень даже можно.
Крыша ^ не в самом начале означает отрицание. Получается примерно так:
{(^пять)}
Как вариант можно искать своё слово и потом проверять было ли совпадение: {пять}
EvroStandart вне форума  
Старый 27.06.2006, 14:09     # 5
Gr@nd@d
Full Member
 
Аватар для Gr@nd@d
 
Регистрация: 15.09.2004
Адрес: Палата74@Дурдом.RU
Пол: Male
Сообщения: 593

Gr@nd@d ГуруGr@nd@d ГуруGr@nd@d ГуруGr@nd@d ГуруGr@nd@d ГуруGr@nd@d ГуруGr@nd@d ГуруGr@nd@d ГуруGr@nd@d ГуруGr@nd@d ГуруGr@nd@d ГуруGr@nd@d ГуруGr@nd@d ГуруGr@nd@d ГуруGr@nd@d ГуруGr@nd@d Гуру
Цитата:
Сообщение от EvroStandart
А по моему очень даже можно. Как вариант можно искать своё слово и потом проверять было ли совпадение: {пять}
Так у него, насколько я понял, выражение вставляется в какой-то парсер и доп.проверку туда не вставить. А "крышка" дает отрицание в квадратных скобках "[^...]", а не в круглых. Это называется инвертированный символьный класс. По крайней мере по стандарту.
__________________
Количество ума на Земле постоянно, а население растёт...
Gr@nd@d вне форума  
Старый 27.06.2006, 16:51     # 6
EvroStandart
Full Member
 
Аватар для EvroStandart
 
Регистрация: 20.01.2004
Адрес: Таллинн
Пол: Male
Сообщения: 623

EvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собой
ага, я фигурные скобки с квадратными перепутал. А круглые - это группировка, внитри них всё также должно работать. Но тут они наверно вообще ничего не маняют
EvroStandart вне форума  
Старый 28.06.2006, 13:51     # 7
Gr@nd@d
Full Member
 
Аватар для Gr@nd@d
 
Регистрация: 15.09.2004
Адрес: Палата74@Дурдом.RU
Пол: Male
Сообщения: 593

Gr@nd@d ГуруGr@nd@d ГуруGr@nd@d ГуруGr@nd@d ГуруGr@nd@d ГуруGr@nd@d ГуруGr@nd@d ГуруGr@nd@d ГуруGr@nd@d ГуруGr@nd@d ГуруGr@nd@d ГуруGr@nd@d ГуруGr@nd@d ГуруGr@nd@d ГуруGr@nd@d ГуруGr@nd@d Гуру
Цитата:
Сообщение от EvroStandart
А круглые - это группировка, внитри них всё также должно работать.
По стандарту - увы, не должно. В утилитах (greep например) для инверсии маски обычно ключ специальный предусмотрен, типа "найти все, что НЕ совпадает с указанной маской".

Цитата:
Сообщение от Gr@nd@d
Попробуй поиграться с модификатором "?!"
Я не знаю, какая реализация регулярных выражений используется, но для очистки совести еще попробовал бы вариант: "(ТвойТекст){0,0}".
У меня под линухом не сработал, но чем черт не шутит?
__________________
Количество ума на Земле постоянно, а население растёт...
Gr@nd@d вне форума  
Старый 28.06.2006, 18:51     # 8
crawler
Full Member
 
Регистрация: 11.12.2002
Сообщения: 864

crawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собой
Совесть чиста ;( .Судя по всему поиска на отсутсвие стринга не предусмотрено, так как видел предложение добавить такую опцию в "feature requests"

В круглых скобках знак ^ не имеет значения "not", только в квадратных.
crawler вне форума  
Старый 11.07.2006, 15:14     # 9
is_absent
::VIP::
 
Аватар для is_absent
 
Регистрация: 27.01.2004
Адрес: Россия. Барнаул
Пол: Male
Сообщения: 417

is_absent Молодецis_absent Молодецis_absent Молодец
^([^a][^b][^c])*$
__________________
Nunc est bibendum
is_absent вне форума  
Старый 15.11.2006, 00:22     # 10
LAndrew2
Full Member
 
Аватар для LAndrew2
 
Регистрация: 15.11.2002
Адрес: Moscow
Сообщения: 834

LAndrew2 Луч света в тёмном царствеLAndrew2 Луч света в тёмном царствеLAndrew2 Луч света в тёмном царствеLAndrew2 Луч света в тёмном царствеLAndrew2 Луч света в тёмном царстве
подскажие, плз, каким регулярным выражением можно "зацепить" и удалить следующие строчки
Код:
<DIV><A href="text.html" class="more">... whole issue</A></DIV> 
<DIV><A href="article.html" class="more">... все статьи </A></DIV> 
<DIV><A href="channel.html" class="more">... другие материалы</A></DIV>
если что, язык Jscript (хотя это не так важно)

делаю так
Код:
var reg = /<A href=\"[0-9a-zA-Z_\.]+\" class=\"more\">[0-9a-zA-Z_а-яА-Я\.]+<\/A>/ 
text = text.replace(reg, "");
но вроде где-то ошибка...

Последний раз редактировалось LAndrew2; 15.11.2006 в 00:30.
LAndrew2 вне форума  
Старый 15.11.2006, 04:17     # 11
Hubbitus
мод
IMHO Кодер-200(6,7,8)
 
Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734

Hubbitus Бог с наворотамиHubbitus Бог с наворотами
Hubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотами
LAndrew2 на первый взгляд все верно, только пробелы не учтены, возможно что-то вроде:
Код:
var reg = /<A href=\"[0-9a-zA-Z_\.]+\" class=\"more\">.+?<\/A>/g
text = text.replace(reg, "");
подойдет
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям!

Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru
Pahan-Hubbitus.
Hubbitus вне форума  
Старый 15.11.2006, 12:18     # 12
LAndrew2
Full Member
 
Аватар для LAndrew2
 
Регистрация: 15.11.2002
Адрес: Moscow
Сообщения: 834

LAndrew2 Луч света в тёмном царствеLAndrew2 Луч света в тёмном царствеLAndrew2 Луч света в тёмном царствеLAndrew2 Луч света в тёмном царствеLAndrew2 Луч света в тёмном царстве
вроде работает... а что означает конструкция
Код:
.+?
?

а! вроде понял... любое кол-во символов (за исключением символа новой строки) и любое (в т.ч. нулевое) кол-во слов...

Последний раз редактировалось LAndrew2; 15.11.2006 в 12:21.
LAndrew2 вне форума  
Старый 15.11.2006, 15:49     # 13
Hubbitus
мод
IMHO Кодер-200(6,7,8)
 
Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734

Hubbitus Бог с наворотамиHubbitus Бог с наворотами
Hubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотами
Цитата:
LAndrew2:
а что означает конструкция
.+?
От одного и более символов, наименьшей длины, чтобы удовлетворить шаблону. Входит ли символ новой строки туда или нет зависит от модификаторов, по умолчанию не входит, да.
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям!

Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru
Pahan-Hubbitus.
Hubbitus вне форума  
Старый 17.01.2007, 12:08     # 14
LAndrew2
Full Member
 
Аватар для LAndrew2
 
Регистрация: 15.11.2002
Адрес: Moscow
Сообщения: 834

LAndrew2 Луч света в тёмном царствеLAndrew2 Луч света в тёмном царствеLAndrew2 Луч света в тёмном царствеLAndrew2 Луч света в тёмном царствеLAndrew2 Луч света в тёмном царстве
есть задача:
1) имеется список имен файлов, все имена в определенном формате,
данный формат задается пользователем, например, "%l4 - %l1 - %l2.mp3", где, например, %l1 исполнитель, %l2 - композиция, %l4 - трек
2) имеется набор файлов, все имена этих файлов также в определенном формате, заданном пользователем, например, "track %f4 %f#.mp3", где, например, %f1 исполнитель, %f2 - композиция, %f4 - трек, %f# - любые символы
3) задано, например, что файл в списке соответствует реальному файлу, если %l4=%f4 (это условие может меняться пользователем)
необходимо смэтить реальные файлы с файлами в списке и показать "реальное имя -> имя в списке" для каждого файла

для выполнения задачи необходимо использование регулярных выражений, для поиска соответствий необходимо заменить все выражения типа %l или %f на (.*), но чтобы потом получить и использовать значения (порядок которых может быть произвольным), надо как-то запоминать в какой позиции (.*) оказалось.
потому вопрос: возможно ли значениям в скобках, типа (.*), присваивать имена и потом к ним обращаться по именам, а не по номеру в массиве?
LAndrew2 вне форума  
Старый 17.01.2007, 12:14     # 15
is_absent
::VIP::
 
Аватар для is_absent
 
Регистрация: 27.01.2004
Адрес: Россия. Барнаул
Пол: Male
Сообщения: 417

is_absent Молодецis_absent Молодецis_absent Молодец
(?P<name>expression) если я не ошибаюсь
__________________
Nunc est bibendum
is_absent вне форума  
Старый 17.01.2007, 16:14     # 16
LAndrew2
Full Member
 
Аватар для LAndrew2
 
Регистрация: 15.11.2002
Адрес: Moscow
Сообщения: 834

LAndrew2 Луч света в тёмном царствеLAndrew2 Луч света в тёмном царствеLAndrew2 Луч света в тёмном царствеLAndrew2 Луч света в тёмном царствеLAndrew2 Луч света в тёмном царстве
что-то такая конструкция
(?P<name>.*)
не срабатывает на VBScript
есть еще варианты?
LAndrew2 вне форума  
Старый 17.01.2007, 16:55     # 17
is_absent
::VIP::
 
Аватар для is_absent
 
Регистрация: 27.01.2004
Адрес: Россия. Барнаул
Пол: Male
Сообщения: 417

is_absent Молодецis_absent Молодецis_absent Молодец
на http://www.regular-expressions.info/vbscript.html написано, что на VBScript изя делать так... меняй язык
__________________
Nunc est bibendum
is_absent вне форума  
Старый 18.01.2007, 09:34     # 18
LAndrew2
Full Member
 
Аватар для LAndrew2
 
Регистрация: 15.11.2002
Адрес: Moscow
Сообщения: 834

LAndrew2 Луч света в тёмном царствеLAndrew2 Луч света в тёмном царствеLAndrew2 Луч света в тёмном царствеLAndrew2 Луч света в тёмном царствеLAndrew2 Луч света в тёмном царстве
is_absent,
на что? )
а как можно сделать в VBScript? может какая-то другая конструкция есть?
LAndrew2 вне форума  
Старый 18.01.2007, 16:52     # 19
Hubbitus
мод
IMHO Кодер-200(6,7,8)
 
Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734

Hubbitus Бог с наворотамиHubbitus Бог с наворотами
Hubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотами
А на Java-Script тоже не работает? (это так, просто предложение попробовать, проверять нету времени)
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям!

Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru
Pahan-Hubbitus.
Hubbitus вне форума  
Старый 18.01.2007, 16:57     # 20
is_absent
::VIP::
 
Аватар для is_absent
 
Регистрация: 27.01.2004
Адрес: Россия. Барнаул
Пол: Male
Сообщения: 417

is_absent Молодецis_absent Молодецis_absent Молодец
Цитата:
Сообщение от LAndrew2 Посмотреть сообщение
а как можно сделать в VBScript? может какая-то другая конструкция есть?
Я не силен в этом можно попробовать руками организовать эту функцию. т.е. сначала выполняем обычное регулярное выражение, а следующим шагом формируем массив с именами (т.е. нужно будет соответствие индекс скобки -- имя).


Цитата:
Сообщение от Hubbitus Посмотреть сообщение
А на Java-Script тоже не работает?
судя по-всему тоже не работает...
__________________
Nunc est bibendum
is_absent вне форума  


Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 17:19.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.