Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Помогите написать регулярку [3]
1. исходная строка
2. результат |(?:\d{0-3}\s*(\.|,)\s*\d{0-3}\s*(\.|,)\s*\d{0-3}\s*(\.|,)\s*\d{0-3}\s*(\.|,)\s*)|s
p.s. добавлю что ip адрес может находиться где угодно. не только в конце
p.p.s. я так думаю надо от вырезания простого IP плясать, наращивая мусор
p.p.p.s. результатом пример должна быть строка "сегодня вышла в свет сборка кодеков версии 4.12с скачать ее можно по адресу"
Под ваш пример, должна заработать по идее. Но, может, чего гуру и другие форумчане еще подскажут.
П.С. М... скопировал и не посмотрел, нужно так:
вместо \d{0-3} написать \d{0,3} - так правильно...
apakc
Отправлено: 13 Января, 2010 - 16:48:54
Новичок
Покинул форум
Сообщений всего: 3
Дата рег-ции: Янв. 2010
Помог: 0 раз(а)
Не работает
В общем плохая затея вылавливать такие плохие IP адреса...
Вопрос следующий можно ли с помощью регулярного выражения оставить в исходной строке "сегодня вышла в свет сборка кодеков версии 4.12с скачать ее можно по адресу 10 . 56 . 84 . 119" куски типа 4.12с, т.е. шаблон ХХ.ХХ где Х числа, а все что не состоит в таком шаблоне и является цифрой убить?
глупый вопрос, но может я опять чего-то не понимаю
isle
Отправлено: 13 Января, 2010 - 17:14:41
Гость
Покинул форум
Сообщений всего: 111
Дата рег-ции: Окт. 2009 Откуда: Казахстан, Алматы
Помог: 0 раз(а)
apakc пишет:
Не работает
apakc пишет:
Не работает
Должна, регулярку вам правильно дал, уверен в этом... Сам их уже почти с сотню для своего чекера наклепал, очень длинных и сложных - все работают. Может, вы опять чего-то недоговорили, как в прошлый раз ? П.С. Я с ерегами пока не работал еще, их не знаю, если честно, а вот преги знаю уже хорошо, попробуйте с ними... у меня все путем работает ;)
Цитата:
можно ли с помощью регулярного выражения...
Можно. Можно выкинуть, например, все цифры, все англ. буквы, только определенные цифры или только заглавные буквы и т.д.
Вообще, все посторонние символы можно удалить из любой строки. В примере выше можно очистить вашу строку было бы от мусора, например, символов "-", что было бы правильней, а также все запятые поменять на точки. Для этого есть замечательная штука - прег_реплейс, я сначала им обрабатываю строку, а потом вытаскиваю то, что мне нужно, так проще и быстрее, но удобство появляется только если строка чертовски сложная и длинная. Попробуйте... Примерно это выглядит так:
Дальше уже, думаю, всё понятно из логики Если не получилось что-то, то дайте конкретные несколько примеров... Должно всё работать.Отредактировано модератором: movEAX, 18 Января, 2010 - 18:17:15
leshiy_SV
Отправлено: 20 Января, 2010 - 15:11:31
Гость
Покинул форум
Сообщений всего: 77
Дата рег-ции: Окт. 2009 Откуда: Пятигорск
Помог: 0 раз(а)
Всем доброго времени. В регулярных выражениях не силен и идей по данному случаю вообще нет. Поэтому прошу помощи, нужно из Иванов С. В. и Под ред. Иванова С. В. и подобных выражениях выдернуть буквы Ив, т.е. первые две буквы из фамилии.
vitaliy_mad
Отправлено: 20 Января, 2010 - 15:20:47
Участник
Покинул форум
Сообщений всего: 1107
Дата рег-ции: Окт. 2008 Откуда: Украина, Мариуполь
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Помог: 57 раз(а)
/([А-Я][а-я])[а-я]+ [А-Я]\. [А-Я]\./ Это если фамилии везде идут с инициалами. Если с кироиллицей проблеммы получатся, надо подсмотреть где-нибудь коды символов (Добавление)
И написать их вместо букв вот так: \xXX
biperch
Отправлено: 23 Января, 2010 - 21:28:40
Частый посетитель
Покинул форум
Сообщений всего: 588
Дата рег-ции: Окт. 2009 Откуда: Днепропетровск
А в случае с прегами (preg_) выдается масив (aray), чтоб его распечатать, нужно указать, какой именно элемент массива нужен. Если нет круглых скобок - элемент массива только 1 - $array[0], если есть хоть одна пара круглых скобок, то эти самые скобки (их содержимое) заносится в элемент 2 - $array[1] и т.д. Т.е. нужно выводить так:
Если $str="Под ред. !Иванова [С].В.", то будет работать.
Также, если проблемы с кодировкой, то есть функция icon: сначала преобразуйте ее из утф8 в сп-1251, сделайте необходимые операции , затем опять преобразуйте для вывода или пишите сразу документ редактором, который сохраняет в утф8.
В общем, пока вы не определитесь что именно вам надо, трудно будет определиться как это лучше сделать Надеюсь, помог.
leshiy_SV
Отправлено: 13 Февраля, 2010 - 09:22:13
Гость
Покинул форум
Сообщений всего: 77
Дата рег-ции: Окт. 2009 Откуда: Пятигорск
Помог: 0 раз(а)
isle пишет:
Не понятно, зачем вам велосипед с 4-мя колесами? Улыбка Выше есть пример в 2 строчки.
не отделаешься, тут может быть несколько вариантов и все их нет возможности учесть. к тому же если авторы будут зарубежные, а там как кажется у них вначале идет имя а потом фамилия. И как это тогда учесть? Да так же и в русских, если кто то напишет вначале имя и отчество а потом фамилию, причем полностью как тогда быть?
Поэтому я не нашел другого никакого способа, кроме как напрямую указывать фамилию знаком !. если есть другие способы я с удовольствием попробую, но пока ничего подходящего не нашлось
isle пишет:
А вообще регулярка неправильная. В данном случае можно написать так (если проблемы с кирилицей:
почему неправильно? она хотя бы выводит правильный результат. А ваша
что то у меня ничего не выводит, массив $found пустой
isle
Отправлено: 13 Февраля, 2010 - 11:09:35
Гость
Покинул форум
Сообщений всего: 111
Дата рег-ции: Окт. 2009 Откуда: Казахстан, Алматы
Помог: 0 раз(а)
А... понятно... у вас сложный вывод данных. В таком случае, нужно хотябы примеров 5-10, чтоб можно было составить маску с большой вероятностью совпадений и использовать, возможно, проверку нескольких масок, их массив.
Поскольку я не особо представляю как и что у вас там может выводиться (но суть ясна теперь), предлагаю сделать массив мусора из всех возможных вариантов, например, введите 5-10 вариантов совпадений, которые нужно удалить, а далее регуляркой уже проще будет пройтись по более простой маске и с вероятностью до 100% вытащить результат.
После такой предварительной обработки далее выборку делать будет проще. Можно для регулярок также создать массив из нескольких вариантов и пройтись через цикл, либо создать мега-универсальную регулярку на все случаи жизни, но нужно примеры ваши глянуть, чтоб на угад не писать.
П.С. "Под ред. !Иванова [С].В." - квадратные (возможно, круглые тоже) скобки могут присутствовать или это опечатка? Если этот мусор тоже есть, то и его нужно удалить (его вставить позже в результат всегда можно):
После обработки должно остаться только что-то типа: "Иванова С.В." или "С.В. Иванова". Обработать это дело уже не сложно: буква+точка, буква+точка и слово, с которого вырезаем только первые 2 (или 3-4, если англ.) буквы по регулярке. Если могут быть запятые или другие знаки (тире, например), преобразуйте их в точки, чтоб привести к единой упрощенной маске с помощью str_replace().
leshiy_SV
Отправлено: 13 Февраля, 2010 - 11:37:21
Гость
Покинул форум
Сообщений всего: 77
Дата рег-ции: Окт. 2009 Откуда: Пятигорск
Помог: 0 раз(а)
isle пишет:
П.С. "Под ред. !Иванова [С].В." - квадратные (возможно, круглые тоже) скобки могут присутствовать или это опечатка?
это опечатка их вообще не должно быть. просто в начале я хотел, выделить первую букву фамилии квадратными скобками (просто экспериментировал). а потом решил что проще указать просто каким нибудь символом саму фамилию, а потом просто убрать его
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.