Автор Тема: Вырезка содержимого Body + регулярные выражения  (Прочитано 5266 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Lucent

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 57
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Нужно вырезать содержимое , для этого использую
preg_match("/]{0,}>(.*)<\\/body>/i",$buf,$u);
Это работает только с предварительным использованием
$buf=str_replace("\\r\\n",\'\',$buf), но не всегда (не могу понять почему).
То есть дело в символах перевода строки. Как правильно составить регулярное выражение и не использовать str_replace().

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Вырезка содержимого Body + регулярные выражения
« Ответ #1 : 23 Октября 2003, 12:48:33 »
модификатор s добавь
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн ondr

  • Модератор
  • Глобальный модератор
  • Старожил
  • *****
  • Сообщений: 440
  • +0/-0
  • 0
    • Просмотр профиля
Вырезка содержимого Body + регулярные выражения
« Ответ #2 : 23 Октября 2003, 13:17:05 »
И еще {0,} замени на *? или на {0,}?
0 OK, 0:1

Оффлайн Yukko

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1586
  • +0/-0
  • 0
    • Просмотр профиля
    • http://estrabota.com.ua
Вырезка содержимого Body + регулярные выражения
« Ответ #3 : 23 Октября 2003, 13:24:53 »
ondr
А можно узнать чем вызвано применение квантификатора к квантификатору? Я не понимаю этой конструкции, я не понимаю смысла применения этой конструкции...
ИМХО .*? вместо {0,}  будет достаточно
работа в Украине

Оффлайн mike

  • ProPerl\'er
  • Старожил
  • ****
  • Сообщений: 435
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Вырезка содержимого Body + регулярные выражения
« Ответ #4 : 23 Октября 2003, 13:39:05 »
Там в принципе все равно, что применять, т.к. используется символьный класс [^>], а вот максимальный квантификатор может быть лучше оптимизирован в PCRE. И тогда уж не {0,}, а * :) По меньшей мере, оно читабельней.
[ основной браузер когда-то был, теперь попробуй разберись =]

Оффлайн ondr

  • Модератор
  • Глобальный модератор
  • Старожил
  • *****
  • Сообщений: 440
  • +0/-0
  • 0
    • Просмотр профиля
Вырезка содержимого Body + регулярные выражения
« Ответ #5 : 23 Октября 2003, 13:39:55 »
Yukko
[^>]{0,} - будет найдена максимальная строка не содержащая ">". Не так ли? Когда нужно минимальное значение, т.е. [^>]{0,}? или [^>]*?.

.*? - это ты про что?
0 OK, 0:1

Оффлайн ondr

  • Модератор
  • Глобальный модератор
  • Старожил
  • *****
  • Сообщений: 440
  • +0/-0
  • 0
    • Просмотр профиля
Вырезка содержимого Body + регулярные выражения
« Ответ #6 : 23 Октября 2003, 14:11:54 »
Ребята сорри. Беру назад свои посты. Я сегодня с утра торможу...
Все было и так нормально. Менять ничего не надо.
0 OK, 0:1

Оффлайн Lucent

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 57
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Вырезка содержимого Body + регулярные выражения
« Ответ #7 : 23 Октября 2003, 15:07:48 »
[Макс
Насчет S можно поподробней? Это не то же самое, что [\\r\\n]{0,}.
Поясню, сoдержимое файла (обязательно есть "перенос строки"):

1111\';
Коректно вырезать \'1111\' я могу добавляя [\\r\\n]{0,}, то есть
preg_match("/]{0,}>[\\r\\n]{0,}(.*)<\\/body>/i",$z,$u);

Но если содержимое будет:

1111
2222\';
То есть теперь переводы строк находятся уже в самом (.*). Насколько я понимаю .* - "соответствует определенному символу многократно, если тот существует", но кроме перевода строк.

Как быть, то есть вырезать "11112222"?

Оффлайн Lucent

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 57
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Вырезка содержимого Body + регулярные выражения
« Ответ #8 : 23 Октября 2003, 15:25:25 »
Почему не проходит
preg_match("/]{0,}>[\\s]{0,}([.*[\\s]{0,}]{0,})[\\s]{0,}<\\/body>/i",$z,$u);

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Вырезка содержимого Body + регулярные выражения
« Ответ #9 : 23 Октября 2003, 15:35:21 »
модификаторы ставятся после рег. выражения (там где у тебя i стоит - он тоже является модификатором)
/]{0,}>(.*)<\\/body>/is
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Lucent

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 57
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Вырезка содержимого Body + регулярные выражения
« Ответ #10 : 23 Октября 2003, 15:51:16 »
Макс
1. \\s - можно ставить и в регулярное выражение
2. После /.../s - все получилось так как мне нужно было.

Огромное спасибо.

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Вырезка содержимого Body + регулярные выражения
« Ответ #11 : 23 Октября 2003, 17:24:18 »
\\s в регулярных выражениях - это метасимвол совпадающий с символами пробела, таблуляции, новой строки и вроде еще что-то
а еще есть  модификатор s - он разрешает, чтобы символ точка в регекспе (означающая любой символ) могла совпадать и с символом новой строки (по умолчанию точка с \\n не совпадает)
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28